合并 Python 中的多边形形状文件

Merging Polygon Shapefiles in Python

我的 python3 脚本创建了变量 geometries_list,其值是一个 shapefile 列表,每个多边形代表一个地理区域

[<shapefile.Shape at 0x7f060abfae48>,
 <shapefile.Shape at 0x7f05dcaf1cc0>,
 <shapefile.Shape at 0x7f060a86b278>,
 <shapefile.Shape at 0x7f05da470668>]

我想要 "merge" 多边形。我尝试了以下代码

from functools import reduce
from shapely.geometry import Polygon
union = reduce(lambda x,y: x.union(y), geometries_list) 

但它给出了结果: AttributeError: 'Shape' 对象没有属性 'union'

我看到另一种方法涉及创建 shapefilewriter 对象并连续覆盖列表中的每个多边形 https://gis.stackexchange.com/questions/103033/using-pyshp-to-merge-two-shapefiles 这种方法可能有效,但每次覆盖都会保存到磁盘

也许值得一提的是 shapely.ops.unary_union 是一种更有效的合并形状的方法。

您可以通过 GeoJSON 表示将 shapefile.Shape 对象转换为 shapely.Polygon 对象,并按如下方式合并它们。

from shapely.geometry import shape
from shapely.geometry.ops import unary_union

union = unary_union([shape(s.__geo_interface__) for s in geometries_list])