我的数据在PostGIS数据库中。我想从查询生成shapefile。我该怎么办?

#1 楼

推荐的方法是使用pgsql2shp实用程序,该实用程序应与PostGIS一起安装。请注意,您必须在查询中包括“几何”列。

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


示例(在当前目录中创建qds_cnt.shp):

$ 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].


如果要将整个表另存为shapefile,只需使用表名作为查询。

还可以使用ogr2​​ogr实用程序,但是它具有更多的依赖性,因此不应成为第一选择。如果确定,等效命令为:

$ 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'"


另请参见


Linfinity PostGIS导入/导出指南
使用Python将PostGIS表转换为Shapefile吗?


评论


是否可以使用pgsql2shp将视图导出到shapefile?

–里卡多·巴罗斯·洛伦索
18 Mar 27 '18 at 20:32

#2 楼

我没有足够的声誉积分来评论rudivonstaden的答案,但我想补充一点,以大写字母编写sql命令对pgsql2shp至关重要。

例如,这将不起作用:

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


这将起作用:

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


#3 楼

根据要导出的数据,另一种方法是使用qgis或类似的产品:在其中打开postgis的连接,然后选择所需的数据;然后将其另存为shapefile ...

如果要自动导出和/或大量数据,rudivonstaden提供了适当的解决方案!