我在Python中有一个形状多边形的列表。要使用.touches()方法找出哪种多边形触摸很容易。但是,只有当多边形共享 more 而不是一个点(换句话说,共享边框)时,我才需要返回true。让我来说明一下:
IPython 0.10 -- An enhanced Interactive Python.
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仅共享一个点。我正在寻找的是一个在上面的例子中给我真,假,假的功能,或者只是返回触摸点数的东西,然后我可以自己完成其余的逻辑。
当然,任何不涉及手动迭代所有点的解决方案都是最佳的 - 如果我需要这样做,它会破坏使用形状的目的: - )
提前致谢!
答案 0 :(得分:7)
如果你真的想检查两个多边形是否共享超过x个点数,你可以这样做:
p0,p1,p2 = polygons
x = 2
len(set(p1.boundary.coords).intersection(p2.boundary.coords))>=x
但我认为你可能想要的是确定两条边是否共线(和重叠)。
安德鲁建议的实施可能就是您所寻求的:
>>> type(p0.intersection(p1)) is geometry.LineString
True
>>> type(p1.intersection(p2)) is geometry.LineString
False
答案 1 :(得分:4)
我没有使用过匀称,但你试过看看两个多边形的交点是否是一条线?