1

我正在尝试将 shapefile 上传到 PostGIS。我正在使用 Flask 并从用户那里获取文件(.shp、.shx、.dbf 和 .prj),并在使用 PYSHP python 库访问形状集合之前将它们保存到临时文件中。

r = shapefile.Reader(tempfile_name + '.shp')
shapes = r.shapes()

我想要做的是组合形状集合中的多边形并将它们与其他一些数据一起作为一条记录添加到数据库中。基本上将多边形合并成一个多多边形。PostGIS 表的相关列定义为:

footprint = db.Column(Geometry(geometry_type='MULTIPOLYGON', srid=27700))

我不知道如何合并多边形并将它们转换为可以使用 SQLAlchemy 和 GeoAlchemy2 写入 PostGIS 数据库的格式。我们将不胜感激地收到有关如何进行的建议。

我看过 geopandas 和 shapely 但似乎可以找到相关信息

我在用

  • 烧瓶 1.0.2
  • PostgreSQL 9.6
  • SQLAlchmey 1.2.7
  • 地球炼金术2 0.4.2

更新 1。

找到了一个似乎可行的解决方案,但似乎相当混乱。

在使用 shapely 库的 cascaded_union 之前,我遍历 shapefile.Reader 的 shape() 并将每个多边形保存到一个数组中。然后使用 pygeoif 库转换信息保存到 postgis 数据库中。

poly = []
for shp in r.shapes():
  if shp.shapeType == 5:
    poly.append(shape(shp.__geo_interface__))
footprint_poly = cascaded_union(poly)

gshape = pygeoif.MultiPolygon(pygeoif.geometry.as_shape(footprint_poly))
project.footprint = 'SRID=27700;{0}'.format(gshape.wkt)
4

0 回答 0