Mis datos están en una base de datos PostGIS. Me gustaría generar un shapefile de una consulta. ¿Cómo puedo hacer eso?
Mis datos están en una base de datos PostGIS. Me gustaría generar un shapefile de una consulta. ¿Cómo puedo hacer eso?
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
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!
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'"