我有一个Shapely多边形列表,想要找出哪些多边形相邻很容易,只需要使用.touches()
方法。然而,我需要的是仅当多边形共享多于一个点时返回True
(换句话说,共享一条边界)。让我举个例子:
In [1]: from shapely.geometry import Polygon
In [2]: polygons = [Polygon([(0,0),(0,1),(1,1),(1,0)]), Polygon([(1,0),(1,1),(2,1),(2,0)]), Polygon([(2,1),(2,2),(3,2),(3,1)])]
In [3]: polygons[0].touches(polygons[1])
Out[3]: True
In [4]: polygons[0].touches(polygons[2])
Out[4]: False
In [5]: polygons[1].touches(polygons[2])
Out[5]: True
在这种情况下,多边形0和1共享两个点(整个边界)。多边形1和2只共享一个点。我需要的是一个函数,在上面的例子中给我
True
,False
,False
或者只返回接触点的数量,然后我可以自己完成剩下的逻辑。当然,任何不需要手动迭代所有点的解决方案都是最优的 - 如果我需要那样做,那么使用Shapely的目的就被打败了 :-)