여러 shapefile이있는 디렉토리가 있습니다.
ogr2ogr을 사용하여 이러한 모든 shapefile을 MapInfo로 변환하는 방법은 무엇입니까?
하나의 파일을 변환하는 방법을 알고 있습니다. 그리고 각 파일에 대한 줄을 쓰는 배치 스크립트를 만들 수 있습니다. 그러나 디렉토리 (및 하위 디렉토리)의 모든 파일을 변환하는 더 쉬운 방법은 없습니다.
여러 shapefile이있는 디렉토리가 있습니다.
ogr2ogr을 사용하여 이러한 모든 shapefile을 MapInfo로 변환하는 방법은 무엇입니까?
하나의 파일을 변환하는 방법을 알고 있습니다. 그리고 각 파일에 대한 줄을 쓰는 배치 스크립트를 만들 수 있습니다. 그러나 디렉토리 (및 하위 디렉토리)의 모든 파일을 변환하는 더 쉬운 방법은 없습니다.
답변:
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
이 동일한 디렉토리에 작성됩니다.
유닉스 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에서 개발 한 배치 쉘 스크립트가 있습니다 (위의 내용을 기반으로 함).
스크립트의 일부를 좀 더 일반적으로 만들고 사용에 대해 조금 더 설명하는 포크를 만들고 있습니다.
으로 알렉스 마르코프는 말했다 당신이 사용하는 가장 좋은 방법이 될 것 OGR을 .
스크립트를 작성해야하지만 매우 간단한 스크립트를 작성해야합니다. 기본적으로 창을 사용하는 경우 명령 줄에서 원하는 폴더 내부에 다음 코드를 실행하기 만하면됩니다.
for %f in (*.tab) do ogr2ogr -f "KML" %~nf.kml %f
이 사이트를 확인하십시오.
파이썬으로 :
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'):
루프가 필요하지 않습니다. 디렉토리를 소스 및 대상으로 간단히 이름을 지정할 수 있으며 ogr2ogr은 소스 디렉토리의 모든 파일을 변환합니다. 여기를 참조하십시오 : TAB을 MIF로 변환 / MIF를 TAB로 변환
for 루프가 필요한 것처럼 들립니다- 작동 방식에 대한 설명 은 http://www.robvanderwoude.com/for.php 를 참조 하십시오 .
Mapinfo의 Universal Translator는 여러 파일을 처리 할 수 있습니다. 대상 폴더로 이동하여 모든 shapefile을 선택하고 입력 및 출력에 대한 CRS를 정의하십시오. 완료해야합니다.
이것은 위의 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))