Batch memuat beberapa shapefile ke Postgis

11

Menurut shp2pgsqlbantuan, opsi drop , append , create , dan preparate saling eksklusif. Jadi, jika saya ingin membuat tabel dari suatu bentuk dan kemudian menambahkan beberapa bentuk lain, saya melakukan sesuatu seperti berikut, menjaga penghitung untuk menunjukkan apakah kita berada dalam mode buat atau tambahkan.

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

Ini berfungsi, seperti yang diharapkan, tetapi saya sering bertanya-tanya apakah ada cara yang lebih sederhana?

John Powell
sumber

Jawaban:

4

Jika Anda dapat menggunakan ogr2ogr, ia akan mengabaikan opsi membuat saat menambahkan, dan mengabaikan opsi menambahkan saat membuat.

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

Atau di windows di baris perintah:

for /R %f in (*.shp) do ogr2ogr -f "PostgreSQL" PG:dbname=databasename -append -nln schema.table_name "%f"
HeikkiVesanto
sumber
1
Tentu, ogr2ogr berfungsi. Berpikir akan ada solusi sederhana. Terima kasih
John Powell