複数のシェープファイルを含むディレクトリがあります。
ogr2ogrでこれらすべてのシェープファイルをMapInfoに変換するにはどうすればよいですか?
1つのファイルを変換する方法を知っています。そして、各ファイルの行を書き込むバッチスクリプトを作成できます。しかし、ディレクトリ(およびサブディレクトリ)内のすべてのファイルを変換する簡単な方法はありません。
複数のシェープファイルを含むディレクトリがあります。
ogr2ogrでこれらすべてのシェープファイルをMapInfoに変換するにはどうすればよいですか?
1つのファイルを変換する方法を知っています。そして、各ファイルの行を書き込むバッチスクリプトを作成できます。しかし、ディレクトリ(およびサブディレクトリ)内のすべてのファイルを変換する簡単な方法はありません。
回答:
Windowsでは、現在および現在のサブディレクトリについて、次のコマンドを試してください。
for /R %f in (*.shp) do ogr2ogr -f "MapInfo File" "%~dpnf.tab" "%f"
簡単に説明するために、ここで何が起こっているかの策略を、%~dpnf.tab
変数の使用%fを、それが追加されて、Dの川の手紙、p個の ATH名(つまり、フォルダまたはディレクトリ)、および抽出ファイルのn(なしAMEを.shp
ファイル拡張子) 。最後に、.tab
新しい拡張子の複合変数修飾子の直後に追加されます。
あなたがディレクトリにあるのであればC:\MyData
、あなたは、このディレクトリ内のデータ、およびサブディレクトリ持っているC:\MyData\Region1
とC:\MyData\Region1\City1
、(と任意のシェープファイル.shp
の拡張子)を処理し、そしてと似た名前のファイルされる.tab
同じディレクトリに作成されます。
%f
を2倍にする必要があり%%f
ます。詳細については、ss64.com / nt / for.htmlを参照してください。
UNIX 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を。
スクリプトを実行する必要がありますが、非常に簡単です。基本的に、Windowsを使用している場合は、コマンドラインで(目的のフォルダー内で)次のコードを実行するだけです。
for %f in (*.tab) do ogr2ogr -f "KML" %~nf.kml %f
このサイトをチェックしてください、すべてはここで説明されます:
pythonを使用:
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を参照してください。
これは、上記のアラゴンの回答の改良版です。.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))