将多个多边形列表合并为多面体。

9

我有一个由多边形组成的列表

myList = [[<shapely.geometry.polygon.Polygon object at 0x110e09d90>], [<shapely.geometry.polygon.Polygon object at 0x110e09f90>], [<shapely.geometry.polygon.Polygon object at 0x110ec9150>]]

我该如何将它们创建为一个 MultiPolygon?我理解不了。

您的列表包含多个只包含一个多边形的单元素列表。您的问题表明您期望一个多边形列表。 - Sven Marnach
@Pythonista cascaded_union从多个Polygon列表(就像我在这里发布的那样)创建一个Polygon。 - four-eyes
2
这是一个cascaded_union使用的示例。最好查看代码,看看它是否符合您的需求。http://deparkes.co.uk/2015/02/28/how-to-merge-polygons-in-python/ - Pythonista
1
@Pythonista 太棒了,谢谢!第一次使用shapely,很难跟踪其中的内容! - four-eyes
1个回答

13

看起来你有一个列表的列表(每个列表只有一个项目)。在你进行任何操作之前,请将几何图形转换为平面列表:

myGeomList = [x[0] for x in myList]

实际上有几种组合它们的选项。最好的方法是对几何图形列表进行一元联合,这可能会产生不同的几何类型,例如MultiPolygon,但并非总是如此。

from shapely.ops import unary_union
cu = unary_union(myGeomList)
或者你可以将列表传递给 MultiPolgyon()GeometryCollection(),但这些可能会出现问题(无效、无法使用叠加操作等)。

2
很棒的回答!直接使用MultiPolgyon()不会出错,但会导致错误的结果。在将多边形和多重多边形组合成新的多重多边形时进行了测试。 - Philipp Schwarz
1
如果你有一个大数据集,可能是几个千兆字节,这会非常低效,因为unary_union将尝试合并共享边缘的多边形——例如,如果你的多边形代表欧洲国家,它将把欧洲大陆合并成一个多边形。识别共享路径的计算成本很高,如果你不需要这个功能并且有一个大数据集,一定有更好的解决方案。虽然我不太确定那是什么。 - Richard Smith

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接