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

Xer*_*Xes 6 python polygon shapely

我有一个Python中的形状多边形列表.要使用.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
Run Code Online (Sandbox Code Playgroud)

在这种情况下,多边形0和1共享两个点(整个边界).多边形1和2仅共享一个点.我正在寻找的是一个在上面的例子中给我真,假,假的功能,或者只是返回触摸点数的东西,然后我可以自己完成其余的逻辑.

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

提前致谢!

Pau*_*aul 8

如果你真的想检查两个多边形是否共享超过x个点,你可以简单地这样做:

p0,p1,p2 = polygons
x = 2
len(set(p1.boundary.coords).intersection(p2.boundary.coords))>=x
Run Code Online (Sandbox Code Playgroud)

但我认为你可能想要的是确定两条边是否共线(和重叠).

安德鲁的建议的实现可能正是您正在寻找的:

>>> type(p0.intersection(p1)) is geometry.LineString
True
>>> type(p1.intersection(p2)) is geometry.LineString
False
Run Code Online (Sandbox Code Playgroud)

  • 只是为了记录(它可能会帮助别人):它应该检查geometry.MultiLineString,而不是geometry.LineString (2认同)

and*_*oke 6

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