ogr2ogr을 사용하여 디렉토리의 모든 shapefile을 변환합니까?


25

여러 shapefile이있는 디렉토리가 있습니다.

ogr2ogr을 사용하여 이러한 모든 shapefile을 MapInfo로 변환하는 방법은 무엇입니까?

하나의 파일을 변환하는 방법을 알고 있습니다. 그리고 각 파일에 대한 줄을 쓰는 배치 스크립트를 만들 수 있습니다. 그러나 디렉토리 (및 하위 디렉토리)의 모든 파일을 변환하는 더 쉬운 방법은 없습니다.


운영 체제에 따라 다릅니다. 기본적으로 "for"루프를 만들려면 gis.stackexchange.com/questions/7803/…을
Mike T

OS는 Windows 7입니다. 명령 프롬프트에서 다음을 시도하십시오. for % f in * .shp; ogr2ogr -f MapInfo 파일 $ f.tab을 수행하십시오. 그러나 그것은 작동하지 않습니다. '다음 드라이버로 datasour'$ f.tab '을 (를) 열 수 없습니다 ....
Stefan

다음은 SHP를 TAB에 수행하는 방법입니다. ogr2ogr -f "MapInfo File"% 1.tab % 1.shp. 그러나 OGR이 PRJ 파일을 올바르게 인식 할 수 없으면 잘못된 coordsys가 내장 된 TAB 파일로 쉽게 끝납니다. 선택한 모든 파일을 처리 할 수있는 내장 Universal Translator (scaled down FME)를 사용하는 것이 좋습니다. 올바른 조율 표를 선택할 수 있습니다.
Uffe Kousgaard

실제로 MapInfo 파일의 올바른 투영에 문제가 있습니다. 올바른 투영을 포함하려고 시도하지만 작동하지 않습니다. mapinfo 파일의 투영은 비 지구 (미터)로 설정됩니다. ogr2ogr 도구를 사용하여 올바른 투영을 포함시킬 수 있습니까? 다른 스크립트에 명령 줄을 넣고 싶습니다. 그래서 나는 오히려 범용 번역기를 사용하지 않습니다.
Stefan

OGR 라이브러리 를 사용해 보았 으며 명령 줄 도구입니까?
Alex Markov

답변:


34

Windows에서 현재 및 현재의 서브 디렉토리에 대해 다음 명령을 시도하십시오.

for /R %f in (*.shp) do ogr2ogr -f "MapInfo File" "%~dpnf.tab" "%f"

간단히 설명하기 위해 여기에 무슨 일이 일어나고 있는지의 속임수를 , %~dpnf.tab변수의 사용 % f를 가 추가되는, D의 강 편지, P는 ATH 이름 (즉, 폴더 또는 디렉토리), 추출 파일 N 합니다 (없이 화염을 .shp파일 확장자) . 마지막으로 .tab새 확장에 대한 복합 변수 수정 자 바로 뒤에 추가됩니다.

따라서 directory C:\MyData에 있고이 디렉토리와 하위 디렉토리 C:\MyData\Region1및에 데이터가있는 C:\MyData\Region1\City1경우 모든 Shapefile ( .shp확장자 포함)이 처리되고 비슷한 이름의 파일 .tab이 동일한 디렉토리에 작성됩니다.


시원한! 작동합니다! 대답에 대한 많은 감사 :) 한 가지 더 질문 : 하위 디렉토리를 참조하고 다른 하위 디렉토리의 파일을 변환하는 방법이 있습니까? shapefile을 포함하는 다양한 디렉토리가 있습니다. 예를 들면 : 네덜란드 \ 모양 \ provinceX 네덜란드 \ 모양 \ provinceY 네덜란드 \ 모양 \ provinceZ 그리고이 폴더에이 변환하고 싶습니다 : 네덜란드 \ 맵 인포 \ provinceX 네덜란드 \ 맵 인포 \ provinceY 네덜란드 \ 맵 인포 \ provinceZ 감사합니다 :)
스테판

재귀 검색을 위해 위의 내용을 업데이트했지만 "shape"를 "mapinfo"로 변경하는 추가 논리를 수행하는 방법을 모르겠습니다. 아마도 superuser.com
Mike T

1
빠른 답변에 다시 한 번 감사드립니다. 이것은 매우 도움이되었습니다. 파일을 올바른 디렉토리로 복사하기 만하면됩니다.
Stefan

Windows 명령 행과 배치 파일 명령이 다릅니다. 백분율 %f을 로 두 배로 늘려야 합니다 %%f. 자세한 내용은 ss64.com/nt/for.html 을 참조하십시오.
AndreJ

이것은 대단한 MAC 접근 방식입니다
Ryan Garnett

11

유닉스 bash의 경우 :

#!/bin/bash

for FILE in *.mif # cycles through all files in directory (case-sensitive!)
do
    echo "converting file: $FILE..."
    FILENEW=`echo $FILE | sed "s/.mif/_new.shp/"` # replaces old filename
    ogr2ogr \
    -f "ESRI Shapefile" \
    "$FILENEW" "$FILE"
done
exit

* nix 기반 OS (예 : Linux 또는 OS X)에서 작업하는 경우 clhenrik에서 개발 한 배치 쉘 스크립트가 있습니다 (위의 내용을 기반으로 함).

스크립트의 일부를 좀 더 일반적으로 만들고 사용에 대해 조금 더 설명하는 포크를 만들고 있습니다.



파일 이름에 공백이 있으면 오류가 발생합니다.
JasonRDalton

8

으로 알렉스 마르코프는 말했다 당신이 사용하는 가장 좋은 방법이 될 것 OGR을 .

스크립트를 작성해야하지만 매우 간단한 스크립트를 작성해야합니다. 기본적으로 창을 사용하는 경우 명령 줄에서 원하는 폴더 내부에 다음 코드를 실행하기 만하면됩니다.

for %f in (*.tab) do ogr2ogr -f "KML" %~nf.kml %f

이 사이트를 확인하십시오.

http://www.processamentodigital.com.br/?p=2511


2
당신도 할 수 있다고 생각 : ogr2ogr는 "KML"{outfolder} {infolder} 팁에서 촬영 -f underdark.wordpress.com/2012/05/09/batch-shapefile-clipping
나단 W

NB 이 답변은 다른 파일 형식을 언급 한 밀접한 관련 질문에서 비롯된 것입니다.
whuber

안녕하세요, 우분투 에서이 접근법을 시도하면 예를 들어 ogr2ogr -f "KML"{outfolder} {infolder} '오류 4 : KML 파일을 만들지 못했습니다'라는 오류가 발생합니다. 여기서 무엇이 잘못 될지 아십니까? KML 지원으로 GDAL을 만들었습니다
marty_c

7

파이썬으로 :

import os 

for a in os.listdir(os.getcwd()):
   fileName, fileExtension = os.path.splitext(a)
   os.system('ogr2ogr -f "ESRI Shapefile" %s %s' % (a, fileName + '.tab'))

당신은 os.getcwd()당신의 파일이있는 경로로 변경할 수 있습니다 ...

나는 그것이 당신을 돕기를 바랍니다


for a in *.shp:구문 오류입니다. 당신은 생각하고 있습니다from glob import glob; for a in glob('*.shp'):
Mike T

죄송합니다, 잘못된 스타일로 작성했습니다. 업데이트했습니다. @ Mike Toews 감사합니다.
Aragon

4

루프가 필요하지 않습니다. 디렉토리를 소스 및 대상으로 간단히 이름을 지정할 수 있으며 ogr2ogr은 소스 디렉토리의 모든 파일을 변환합니다. 여기를 참조하십시오 : TAB을 MIF로 변환 / MIF를 TAB로 변환


감사! 하나의 상위 디렉토리에서 모든 하위 디렉토리를 참조하고 모든 파일을 다른 하위 디렉토리로 변환 할 수 있습니까? 나는 : 네덜란드 \ 모양 \ provinceX 네덜란드 \ 모양 \ provinceY 네덜란드 \ 모양 \ provinceZ ... 그리고 이것을이 폴더로 변환하고 싶습니다 : 네덜란드 \지도 정보 \ provinceX 네덜란드 \ mapinfo \ provinceY 네덜란드 \ mapinfo \ provinceZ 각 주마다 줄을 작성하되, 하나의 명령으로도 할 수 있습니다
Stefan

나는 이것을 시도하지 않았지만 이것이 가능하다고 생각하지 않는다. 각 입력 및 출력 디렉토리를 처리하는 루프가 필요합니다. 이 경우 파이썬 접근법을 따르는 것이 더 쉽습니다.
Torsten


0

Mapinfo의 Universal Translator는 여러 파일을 처리 할 수 ​​있습니다. 대상 폴더로 이동하여 모든 shapefile을 선택하고 입력 및 출력에 대한 CRS를 정의하십시오. 완료해야합니다.


0

이것은 위의 Aragon의 답변을 개선 한 것입니다. .TAB 또는 .tab 파일에서만 ogr2ogr을 실행하며 폴더의 다른 파일 형식은 무시합니다.

#!/usr/bin/env python3

import os 

for a in os.listdir(os.getcwd()):
  fileName, ext = os.path.splitext(a)
  if ext.lower() == '.tab':
    print('ogr2ogr -f "ESRI Shapefile" %s %s' % (a.replace(ext,
                           '.shp'), fileName + ext))
    os.system('ogr2ogr -f "ESRI Shapefile" %s %s' % (a.replace(ext,
                           '.shp'), fileName + ext))
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.