多边形在一个以上的点接触到匀称

时间:2009-12-25 10:47:47

标签: python touch polygon shapely

我在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仅共享一个点。我正在寻找的是一个在上面的例子中给我真,假,假的功能,或者只是返回触摸点数的东西,然后我可以自己完成其余的逻辑。

当然,任何不涉及手动迭代所有点的解决方案都是最佳的 - 如果我需要这样做,它会破坏使用形状的目的: - )

提前致谢!

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)

我没有使用过匀称,但你试过看看两个多边形的交点是否是一条线?