如何从Postgis查询中获取shapefile?


Answers:


86

推荐的方法是使用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,只需使用表名作为查询。

您也可以使用ogr2ogr实用程序,但是它具有更多的依赖性,因此不应该作为首选。如果确定,等效命令将是:

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

也可以看看


是否可以使用pgsql2shp将视图导出到shapefile?
里卡多·巴罗斯·洛伦索18'Mar

8

我没有足够的信誉度来评论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'"

7

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.