Carga masiva de múltiples shapefiles en PostGIS

31

Tengo más de cien capas de datos en formato shapefile que quiero cargar en una base de datos PostGIS. Todos están en la misma proyección, pero representan diferentes capas de datos, por lo que no tienen el mismo esquema.

¿Cuál es la forma más eficaz en el tiempo de convertir de forma masiva todos estos archivos en mi base de datos PostGIS (en el sistema operativo Windows 7)?

ACTUALIZACIÓN: la importación masiva en pgAdmin3 "PostGIS shapefile uploader" (como se indica a continuación) ahora está disponible de forma predeterminada con PostGIS 2.0 .

    
pregunta RyanDalton 28.03.2011 - 05:11

4 respuestas

22

Si desea mantener una GUI, la versión más reciente de pgAdmin tiene Shapefile Loader que se puede usar como carga masiva

    
respondido por el Mapperz 28.03.2011 - 16:37
31

Si tienes una computadora con Windows, puedes usar good 'ol CMD.EXE con unos cuantos bucles esotéricos. Asegúrese de hacer esto en un directorio "contenido" con solo los archivos shp / sql que necesita cargar.

Primer paso, cree los archivos del cargador SQL (también asumí que tiene datos Lat / Long WGS84 con 4326. actualice esto en su SRS):

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

Luego revise sus archivos SQL para asegurarse de que se ven bien, luego haga un ciclo similar:

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

El bash equivalente para gente POSIX (Linux, Mac OS X, etc.) es algo como:

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

entonces

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

o ambas partes canalizadas en un solo bucle, si no necesita mantener los archivos interim .sql :

for f in *.shp
do
    shp2pgsql -s 4326 %f public.'basename $f .shp' | psql -d mydb > /dev/null
done
    
respondido por el Mike T 28.03.2011 - 07:36
3

También puede usar este comando único que ayuda a hacer bucles mucho más fácilmente y no necesita crear .sql por separado,

for f in *.shp
    do shp2pgsql -c -D -s 4326 -I $f public.${f%.*} | psql -h hostname -d dbname -U usrname
done
    
respondido por el Sam007 25.11.2012 - 20:34
2

Es posible que también quieras ver SPIT , que es un PostGIS complemento del cargador para QGIS

    
respondido por el Ryan Garnett 14.01.2013 - 21:44

Lea otras preguntas en las etiquetas