複数のシェープファイルをPostGISに一括読み込み


33

PostGISデータベースにアップロードしたいシェープファイル形式の100以上のデータレイヤーがあります。それらはすべて同じ投影法ですが、異なるデータレイヤーを表しているため、同じスキーマを持ちません。

これらすべてのファイルをPostGISデータベース(Windows 7 OS)に一括変換する最も時間効率の良い方法は何ですか?

更新: pgAdmin3の「PostGISシェイプファイルアップローダー」(下記を参照)での一括インポートが、PostGIS 2.0でデフォルトで利用可能になりました。


これに対する類似の答えを探しています。しかし、私はそれを毎晩実行するバッチジョブにしたいです。事実、PostGISをArcSDEのスレーブにしたい(とりあえず)。PostGISとSQLが初めてなので、cmd.exeスクリプトが何をするのかわかりますが、どういうわけか頭に刺さりません。私がしたいのは、バッチジョブとしてArcSDEからエクスポートされた一連のshpファイルを取得し、それらをPostGISにアップロードすると、既存のgis / tablesが既に上書きされます。
-geosmiles

「ArcSDEからPostGISにデータをバッチ同期する方法」の行に沿って、これを新しい質問として尋ねます。興味深いアイデアがあるかもしれません。
マイクT

回答:


22

GUIに固執したい場合、pgAdminの新しいバージョンにはバルクロードとして使用できるShapefile Loaderがあります

ここに画像の説明を入力してください


32

Windowsコンピューターを使用している場合CMD.EXEは、いくつかの難解なforループで適切なol を使用できます。ロードする必要があるshp / sqlファイルのみを含む「包含」ディレクトリでこれを行うようにしてください。

最初のステップとして、SQLローダーファイルを作成します(また、4326でLat / Long WGS84データを持っていると仮定します。これをSRSに更新します)。

for %f in (*shp) do shp2pgsql -s 4326 %f public.%~nf > %~nf.sql

次に、SQLファイルをチェックして見栄えをよくしてから、同様のループを実行します。

for %f in (*sql) do psql -h myserver -d mydb -U myuser -f %f > nul

bashPOSIXフォーク(Linuxでは、マックOS Xなど)のための同等のようなものです:

for f in *.shp
do
    shp2pgsql -s 4326 %f public.`basename $f .shp` > `basename $f .shp`.sql
done

それから

for f in *.sql
do
    psql -h myserver -d mydb -U myuser -f $f > /dev/null
done

または、中間.sqlファイルを保持する必要がない場合は、両方の部分が単一のループにパイプされます。

for f in *.shp
do
    shp2pgsql -s 4326 %f public.`basename $f .shp` | psql -d mydb > /dev/null
done

これは単一のループでよりうまく機能しますかfor f in *.shp do shp2pgsql -s 4326 %f public.'basename $f .shp' > 'basename $f .shp'.sql | psql -h myserver -d mydb -U myuser done
-Sam007

うん、psqlに渡されたSQLが正しいことが確実である限り、1つのコマンドで実行できます(ただし>、これは|パイプ部分を壊すため、リダイレクト部分はありません)。SQL形式のデータの記録がないため、これは良くない、と主張します。
マイクT

4

この単一のコマンドを使用することもできます。これにより、ループがはるかに簡単になり、.sqlを個別に作成する必要がなくなります。

for f in *.shp
    do shp2pgsql -c -D -s 4326 -I $f public.${f%.*} | psql -h hostname -d dbname -U usrname
done

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.