我正在使用Shapely的多边形来处理人类生成的数据。多个人被要求在图像中的某些特定特征周围绘制多边形。因此,对于每个图像,我们都有n个
我可以绘制这些
我希望得到这些多边形的重叠部分或交集。这应该很简单,我可以做类似以下的操作:
我可以在之前的图表上绘制这个交点,我们可以看到: 这看起来很不错。然而,此方法仅返回所有
代码示例:以下虚拟数据给出了此图形:
有没有一种方法(最好使用Shapely)来获取多边形重叠75%的位置?
MultiPolygon
,其中n等于每个图像的参与者数量。我可以绘制这些
Multipolygon
中的每一个。fig, ax = plt.subplots()
for ii, multi_poly in enumerate(multi_polys):
for poly in multi_poly.geoms:
x,y = poly.exterior.xy
plt.plot(x,y, c=colors[ii])
我们可以看到,在某些位置,Multipolygon
重叠,而在其他位置则没有重叠。我希望得到这些多边形的重叠部分或交集。这应该很简单,我可以做类似以下的操作:
intersection = multi_a.intersection(multi_b) \
.intersection(multi_c) \
.intersection(multi_d) \
.inters...
我可以在之前的图表上绘制这个交点,我们可以看到: 这看起来很不错。然而,此方法仅返回所有
Multipoloygon
重叠的区域。是否有一种方法可以获得多边形重叠 75% 的交集?或者重叠 50% 的交集?代码示例:以下虚拟数据给出了此图形:
P1 = Polygon([(0, 0), (1, 0), (1, 1), (0, 1)])
P2 = Polygon([(2.5, 2), (3, 2), (3, 3), (2.5, 3)])
multi_a = MultiPolygon([P1, P2])
P1 = Polygon([(-1, -1), (-1, 2),(2, 2), (2, -1)])
P2 = Polygon([(3, 3), (4, 2), (4, 4), (3, 4)])
multi_b = MultiPolygon([P1,P2])
P1 = Polygon([(-2, 4), (2.2, 4),(2.2, -2), (-2, -2)])
P2 = Polygon([(-1.5, 3), (-1.1, 3), (-1.5, -1), (-1.1, -1)])
multi_c = MultiPolygon([P1,P2])
P1 = Polygon([(2.5, -1), (3.2, -1),(3.2, -2), (-2, -2)])
P2 = Polygon([(3, 0), (4, 0), (3, 1), (4, 1)])
multi_d = MultiPolygon([P1,P2])
在这四个多边形中,由于没有一个点被所有四个多边形占据,因此交集方法将返回无交集。然而,用黄色标记强调的蓝色正方形被蓝色、橙色和绿色多边形占据。因此,在该位置上,75%的多边形重叠。有没有一种方法(最好使用Shapely)来获取多边形重叠75%的位置?
接受的答案在某些情况下似乎会失效。我找到了问题所在:包含形状的边界有时会重叠在内部多边形上。我可以将if geom.contains(polygon):
替换为if geom.contains(polygon.buffer(-1)):
,它会按预期正常工作。