我有一个包含5个多边形的列表,如下所示:
from itertools import compress
from shapely.geometry import Polygon
polys = [<shapely.geometry.polygon.Polygon object at 0x000002D634217668>
<shapely.geometry.polygon.Polygon object at 0x000002D634217780>
<shapely.geometry.polygon.Polygon object at 0x000002D6341F9080>
<shapely.geometry.polygon.Polygon object at 0x000002D634217FD0>
<shapely.geometry.polygon.Polygon object at 0x000002D634217F60>]
我必须将它们分组为相交的多边形:
results = []
for poly in polys:
indices = [poly.intersects(p) for p in polys]
intersect_polys = list(compress(polys, indices))
results.append(intersect_polys)
编辑: 基于评论@Aran-Fey:
如果是3个多边形,例如https://i.imgur.com/ekTokK9.png [a,b,c]
,即使b
,both a and c
与a
相交也是可能的}和c
不相交。
结果将是:
[[b,c], [b,a]]
我必须找到所有这些团体。 由于多边形的顺序并不重要,因此还应删除重复的组(包含相同的多边形)
答案 0 :(得分:1)
我唯一能想到的是迭代所有多边形,然后遍历所有其他多边形以找到交叉点。 (这意味着该算法具有二次运行时复杂度。)效率低下,但它可以完成工作。
result = []
for i, shape in enumerate(polys):
intersected_shapes = [poly for poly in polys[i+1:] if shape.intersects(poly)]
if intersected_shapes:
intersected_shapes.append(shape)
result.append(intersected_shapes)
使用问题(this one)中的输入[a, b, c]
,这会产生输出:
[[b, a], [c, b]]