Carregar em lote vários shapefiles no Postgis

11

De acordo com a shp2pgsqlajuda, as opções soltar , anexar , criar e preparar são mutuamente exclusivas. Portanto, se eu quiser criar uma tabela a partir de uma forma e depois anexar vários outros shapefiles, faço algo como o seguinte, mantendo um contador para indicar se estamos no modo de criação ou adição.

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

Isso funciona, como esperado, mas sempre me perguntei se existe uma maneira mais simples.

John Powell
fonte

Respostas:

4

Se você puder usar ogr2ogr, ele ignorará as opções de criação ao anexar e as opções de acréscimo ao criar.

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

Ou nas janelas na linha de comando:

for /R %f in (*.shp) do ogr2ogr -f "PostgreSQL" PG:dbname=databasename -append -nln schema.table_name "%f"
HeikkiVesanto
fonte
1
Claro, ogr2ogr funciona. Imaginei que haveria uma solução simples. Obrigado
John Powell