postgis将每一行导出到shapefile

时间:2014-11-10 03:59:48

标签: python csv export postgis

我试图从csv导出许多系列点的边界。输入数据是几何POINT类型,输出几何将是多部分多边形。

到目前为止我的工作流程 -

  • 将raw csv加载到postgis,
  • 创建几何和索引,
  • 单点指向多点几何和缓冲区

    SELECT seam,ST_Buffer(ST_Buffer(ST_Multi(ST_Union(the_geom)),50), - 25)as_geom INTO res_buffers 来自res_points GROUP BY seam;

    (点的间距通常为50米,因此缓冲区的扩展/缩小)

  • 我现在想将res_buffers表的每一行导出到shapefile中。所以50行= 50个shapefile。

使用Python,Postgis / PSQL,ogr或Windows shell开放解决方案。

1 个答案:

答案 0 :(得分:2)

如果您还没有唯一ID,请在res_buffers表中添加唯一ID。

Alter table res_buffers add column id serial;

然后你可以使用一个简单的循环结构并调用pgsql2shp 50次。我可以用bash告诉你如何做到这一点,所以如果你在windows中,你将需要cygwin或类似的,或者将它改编为powershell或dos(我无法帮助你,对不起)。以下单线程在shell中运行,

for i in {1..50} ; do pgsql2shp -f $i.shp db_name  "select * from res_buffers where id = $i"; done

将输出1.shp,2.shp等,其中db_name是您的数据库名称。你也可以在$ i.shp前面放一条路径。

如果你不喜欢一个衬里,你也可以将它放在文件中并使其可执行,

for i in {1..50}
  do 
    pgsql2shp -f $i.shp db_name  "select * from res_buffers where id = $i"
 done

如果你想用Python做这件事,MikeT写了一个关于使用shapely and fiona来编写形状文件的优秀答案。如果你在Python中做更多的一般工作,这种方法很棒,但就个人而言,对于这个问题中的单个任务,没有什么比pgsql2shp aproach的简单性更好了。