Python postgis将每行导出到shapefile

Python postgis将每行导出到shapefile,python,csv,export,postgis,Python,Csv,Export,Postgis,我正在尝试从csv导出大量点序列的边界。输入数据为几何点类型,输出几何图形为多部分多边形 我目前的工作流程- 将原始csv加载到postgis 创建几何图形和索引 单点到多点几何图形和缓冲区 选择seam、ST_Buffer(ST_Buffer(ST_Multi(ST_Union,the_geom))、50、-25作为_geom 进入resu缓冲区 从resu点 按煤层分组 (点间距为50m,因此缓冲区扩大/缩小) 现在我想将res_buffers表的每一行导出到一个shapefile中。因此

我正在尝试从csv导出大量点序列的边界。输入数据为几何点类型,输出几何图形为多部分多边形

我目前的工作流程-

  • 将原始csv加载到postgis
  • 创建几何图形和索引
  • 单点到多点几何图形和缓冲区

    选择seam、ST_Buffer(ST_Buffer(ST_Multi(ST_Union,the_geom))、50、-25作为_geom 进入resu缓冲区 从resu点 按煤层分组

    (点间距为50m,因此缓冲区扩大/缩小)

  • 现在我想将res_buffers表的每一行导出到一个shapefile中。因此,50行=50个形状文件


打开Python、Postgis/PSQL、ogr或Windows shell中的解决方案。

如果您还没有唯一的id,请将其添加到res_buffers表中

Alter table res_buffers add column id serial;
然后您可以使用一个简单的循环结构并调用
pgsql2shp
50次。我可以告诉您如何使用bash实现这一点,因此如果您使用的是windows,您将需要cygwin或类似工具,或者将其应用于powershell或dos(抱歉,我无法帮助您)。下面的一个衬里在外壳中运行

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已经写了一个关于如何使用来编写形状文件的极好答案。如果您正在用Python进行更一般的工作,这种方法是很好的,但是,就个人而言,对于本问题中的单个任务而言,没有什么比pgsql2shp aproach imho更简单的了。

如果您还没有唯一的id,请向res_buffers表中添加唯一的id

Alter table res_buffers add column id serial;
然后您可以使用一个简单的循环结构并调用
pgsql2shp
50次。我可以告诉您如何使用bash实现这一点,因此如果您使用的是windows,您将需要cygwin或类似工具,或者将其应用于powershell或dos(抱歉,我无法帮助您)。下面的一个衬里在外壳中运行

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已经写了一个关于如何使用来编写形状文件的极好答案。如果您正在用Python进行更一般的工作,这种方法是很好的,但是,就个人而言,对于本问题中的单个任务而言,没有什么比pgsql2shp aproach imho更简单的了。

如果您还没有唯一的id,请向res_buffers表中添加唯一的id

Alter table res_buffers add column id serial;
然后您可以使用一个简单的循环结构并调用
pgsql2shp
50次。我可以告诉您如何使用bash实现这一点,因此如果您使用的是windows,您将需要cygwin或类似工具,或者将其应用于powershell或dos(抱歉,我无法帮助您)。下面的一个衬里在外壳中运行

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已经写了一个关于如何使用来编写形状文件的极好答案。如果您正在用Python进行更一般的工作,这种方法是很好的,但是,就个人而言,对于本问题中的单个任务而言,没有什么比pgsql2shp aproach imho更简单的了。

如果您还没有唯一的id,请向res_buffers表中添加唯一的id

Alter table res_buffers add column id serial;
然后您可以使用一个简单的循环结构并调用
pgsql2shp
50次。我可以告诉您如何使用bash实现这一点,因此如果您使用的是windows,您将需要cygwin或类似工具,或者将其应用于powershell或dos(抱歉,我无法帮助您)。下面的一个衬里在外壳中运行

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已经写了一个关于如何使用来编写形状文件的极好答案。如果您正在用Python进行更一般的工作,这种方法是很好的,但就个人而言,对于本问题中的单个任务而言,没有什么比pgsql2shp aproach、imho更简单了。

windows shell是否包含cygwin?我将在bash中使用一个简单的循环来实现这一点,假设res_缓冲区中有某种从1到50的递增列,并使用where子句中的id将其包装在pgsql2shp周围。我不知道如何使用power shell或dos来实现,但我相信你可以。windows shell是否包含cygwin?我将在bash中使用一个简单的循环来实现这一点,假设res_缓冲区中有某种从1到50的递增列,并使用where子句中的id将其包装在pgsql2shp周围。我不知道如何使用power shell或dos来实现,但我相信你可以。windows shell是否包含cygwin?我将在bash中使用一个简单的循环来实现这一点,假设res_缓冲区中有某种从1到50的递增列,并使用where子句中的id将其包装在pgsql2shp周围。我不知道如何使用power shell或dos来实现,但我相信你可以。windows shell是否包含cygwin?我将在bash中使用一个简单的循环来实现这一点,假设res_缓冲区中有某种从1到50的递增列,并使用where子句中的id将其包装在pgsql2shp周围。我不知道如何使用powershell或dos来实现这一点,尽管我相信您可以做到。