ogr2ogrを使用してディレクトリ内のすべてのシェープファイルを変換しますか?


25

複数のシェープファイルを含むディレクトリがあります。

ogr2ogrでこれらすべてのシェープファイルをMapInfoに変換するにはどうすればよいですか?

1つのファイルを変換する方法を知っています。そして、各ファイルの行を書き込むバッチスクリプトを作成できます。しかし、ディレクトリ(およびサブディレクトリ)内のすべてのファイルを変換する簡単な方法はありません。


オペレーティングシステムによって異なります。基本的に「for」ループを作成します。gis.stackexchange.com/ questions / 7803
マイクT

OSはWindows 7です。コマンドプロンプトでこれを試します。ogr2ogr -f MapInfo File $ f.tabを実行します。しかし、それは機能しません。私はエラーを取得する:$ f.tab「オープンdatasourできません『』は次のドライバで.....
ステファン・

これは、TABにSHPを実行する方法です:ogr2ogr -f "MapInfo File"%1.tab%1.shp。しかし、OGRがPRJファイルを正しく認識できない限り、誤ったcoordsysが組み込まれたTABファイルが簡単に作成されます。選択したすべてのファイルを処理できるビルトインユニバーサルトランスレーター(スケールダウンされたFME)の使用をお勧めします。正しいcoordsysを選択できます。
Uffe Kousgaard

実際、MapInfo Fileの正しい投影に問題があります。正しい投影法を含めようとしましたが、これは機能しません。de mapinfoファイルの投影法は、非地球(メートル)に設定されています。ogr2ogrツールで正しい投影を含めることは可能ですか?コマンドラインを別のスクリプトに入れたいと思います。そのため、私はむしろユニバーサルトランスレーターを使用しません。
ステファン

OGRライブラリを試してみましたが、それはコマンドラインツールですか?
アレックスマルコフ

回答:


34

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\Region1C:\MyData\Region1\City1、(と任意のシェープファイル.shpの拡張子)を処理し、そしてと似た名前のファイルされる.tab同じディレクトリに作成されます。


クール!これは動作します!回答に感謝します:)もう1つの質問:サブディレクトリを参照して、別のサブディレクトリ内のファイルを変換する方法もあります。シェープファイルを含むさまざまなディレクトリが含まれています。次のような:Netherlands \ shape \ provinceX Netherlands \ shape \ provinceY Netherlands \ shape \ provinceZそして、これをこれらのフォルダに変換したいと思います:Netherlands \ mapinfo \ provinceX Netherlands \ mapinfo \ provinceY Netherlands \ mapinfo \ provinceZ Thanks :)
Stefan

再帰検索について上記を更新しましたが、「shape」を「mapinfo」に変更するための追加のロジックを実行する方法がわかりません。多分superuser.comで
マイクT

1
迅速な対応ありがとうございます。これはとても役に立ちました。ファイルを正しいディレクトリにコピーするだけです。
ステファン

Windowsコマンドラインとバッチファイルコマンドは異なることに注意してください。パーセント%fを2倍にする必要があり%%fます。詳細については、ss64.com / nt / for.htmlを参照してください。
-AndreJ

これは素晴らしい、MACでの同様のアプローチです
ライアンガーネット

11

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ここで開発したバッチシェルスクリプトがいくつかあります(上記のベースです)。

私は、いくつかのスクリプトをもう少し一般的にし、使用方法についてもう少し説明するフォークに取り組んでいます。



ファイル名にスペースが含まれていると、エラーが発生します。
-JasonRDalton

8

アレックス・マルコフは言った、あなたが使用するために、最善の方法は次のようになりOGRを

スクリプトを実行する必要がありますが、非常に簡単です。基本的に、Windowsを使用している場合は、コマンドラインで(目的のフォルダー内で)次のコードを実行するだけです。

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

このサイトをチェックしてください、すべてはここで説明されます:

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


2
私はあなたにも行うことができると思う:から取らogr2ogr -f「KML」{outfolder} {} infolderヒントunderdark.wordpress.com/2012/05/09/batch-shapefile-clipping
ネイサンW

NBこの回答は、さまざまなファイル形式に関連する密接に関連した質問から来ました。
whuber

こんにちは、Ubuntuでこのアプローチを試すと、例えばogr2ogr -f "KML" {outfolder} {infolder}というエラーが表示されます。「エラー4:KMLファイルの作成に失敗しました」。ここで何が間違っているのでしょうか?KMLサポートを使用してGDALを構築しました
-marty_c

7

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'):
マイクT

申し訳ありませんが、間違ったスタイルで書きました。更新しました。@ Mike Toewsありがとう。
アラゴン

4

ループは必要ありません。ディレクトリにソースとデスティネーションの名前を付けるだけで、ogr2ogrはソースディレクトリ内のファイルを変換します。参照: TABからMIFへの変換/ MIFからTABへ


ありがとう!1つの親ディレクトリからすべてのサブディレクトリを参照し、すべてのファイルを他のサブディレクトリに変換できますか。Ihave:Netherlands \ shape \ provinceX Netherlands \ shape \ provinceY Netherlands \ shape \ provinceZなど...そして、これをこれらのフォルダーに変換したい:Netherlands \ mapinfo \ provinceX Netherlands \ mapinfo \ provinceY Netherlands \ mapinfo \ provinceZ各州に行を書きますが、1つのコマンドでそれを行うこともできます
ステファン

私はこれを試していませんが、これが可能だとは思いません。それぞれの入力および出力ディレクトリを処理するループが必要です。この場合、おそらくPythonのアプローチに従う方が簡単です。
トルステン


0

MapinfoのUniversal Translatorは複数のファイルを処理できます。宛先フォルダーに移動し、すべてのシェープファイルを選択し、入力および出力用のCRSを定義します。それを行う必要があります。


0

これは、上記のアラゴンの回答の改良版です。.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.