複数のシェープファイルをPostgisにバッチロードする


11

shp2pgsqlヘルプによると、オプションdropappendcreateおよびprepareは相互に排他的です。そのため、シェイプからテーブルを作成し、他の複数のシェープファイルを追加する場合、次のような操作を行い、作成モードか追加モードかを示すカウンターを保持します。

cnt=0
for shp in $(ls *.shp); do

if [ $cnt -eq  0 ]  ; then

   shp2pgsql -s 27700 -c $shp schema.table_name | psql -h localhost db 

else

   shp2pgsql -s 27700 -a $shp schema.table_name | psql -h localhost db 

fi
((cnt++))
done

これは予想どおりに機能しますが、もっと簡単な方法があるのではないかとよく疑問に思います。

回答:


4

ogr2ogrを使用できる場合、追加時に作成オプションを無視し、作成時に追加オプションを無視します。

for shp in $(ls *.shp);
do
  ogr2ogr -f "PostgreSQL" PG:dbname=databasename -append -a_srs 27700 -nln schema.table_name $shp
done

または、コマンドラインのウィンドウで:

for /R %f in (*.shp) do ogr2ogr -f "PostgreSQL" PG:dbname=databasename -append -nln schema.table_name "%f"

1
確かに、ogr2ogrは動作します。簡単な解決策があると考えました。ありがとう
ジョンパウエル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.