¿Cómo puedo obtener un shapefile de una consulta postgis?

38

Mis datos están en una base de datos PostGIS. Me gustaría generar un shapefile de una consulta. ¿Cómo puedo hacer eso?

    
pregunta rudivonstaden 22.03.2013 - 11:43

3 respuestas

73

La forma recomendada de hacerlo es usar la utilidad pgsql2shp , que debe instalarse con PostGIS. Tenga en cuenta que debe incluir la columna de geometría en la consulta.

$ pgsql2shp -f <path to output shapefile> -h <hostname> -u <username> -P <password> databasename "<query>"

Ejemplo (crea qds_cnt.shp en el directorio actual):

$ pgsql2shp -f qds_cnt -h localhost -u postgres -P password gisdb "SELECT sp_count, geom FROM grid50_rsa WHERE province = 'Gauteng'"

Initializing... 
Done (postgis major version: 2).
Output shape: Polygon
Dumping: XXXXXXXXXXXXXXXXXXXX [1947 rows].

Si desea guardar una tabla completa como un shapefile, solo use el nombre de la tabla como consulta.

También puede usar la utilidad ogr2ogr , pero tiene más dependencias, por lo que no debería ser la primera opción. Si está determinado, el comando equivalente sería:

$ ogr2ogr -f "ESRI Shapefile" qds_cnt.shp PG:"host=localhost user=postgres dbname=gisdb password=password" -sql "SELECT sp_count, geom FROM grid50_rsa WHERE province = 'Gauteng'"

Ver también

respondido por el rudivonstaden 22.03.2013 - 11:43
7

Dependiendo de la pieza de datos que desee exportar, otra forma es usar qgis o un producto similar: allí abre una conexión de postgis y selecciona los datos que le interesan; a continuación, guarde como shapefile ...

Si desea exportar automáticamente y / o una gran parte de los datos, ¡rudivonstaden dio las soluciones adecuadas!

    
respondido por el Aname 22.03.2013 - 15:00
5

No tengo suficientes puntos de reputación para comentar sobre la respuesta de rudivonstaden, pero agregaría que escribir comandos de sql en mayúsculas es importante para pgsql2shp.

Por ejemplo, esto no funcionará:

$ pgsql2shp -f qds_cnt -h localhost -u postgres -P password gisdb "Select sp_count, geom from grid50_rsa where province = 'Gauteng'"

mientras que esto funcionará:

$ pgsql2shp -f qds_cnt -h localhost -u postgres -P password gisdb "SELECT sp_count, geom FROM grid50_rsa WHERE province = 'Gauteng'"
    
respondido por el pandorabob 02.11.2017 - 01:07

Lea otras preguntas en las etiquetas