我在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

在这种情况下,多边形0和1共用两个点(整个边框)。多边形1和2只共享一个点。我正在寻找的是会给我TrueFalseFalse在上面的例子中或只是一些返回触摸点的数量的功能,那么我可以做自己的逻辑的其余部分。

当然,这并不涉及手动通过所有点迭代任何解决方案是最优的 - 如果我需要做的是,它有点儿违背了使用身材匀称的目的: - )

有帮助吗?

解决方案

我没有使用匀称的,但你试图看到,如果两个多边形的交点是线?

其他提示

如果你真的想检查两个多边形共享多,你可以简单地做这点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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top