我试图找出两个多边形是否彼此交叉。 “交叉”是指它们的外部可以互相接触,但它们的内部不能:

仅允许以下两个最右边的解决方案:

python,匀称: How to determine if two polygons cross each other,,同时允许其边缘重叠-LMLPHP

我尝试使用形状相交或十字(和其他一些),但是找不到有效的内置函数(它们通常与内部和外部相关)。

最佳答案

您看过touches方法吗?它似乎可以做您想要的。

如果没有,您可以“自己动手”。例如,这的一些变化:

def myTouches(poly1, poly2):
    return poly1.intersects(poly2) and not poly1.crosses(poly2) and not poly1.contains(poly2)

或者,假设您的形状只是多边形,则可以查看intersection返回的集合。如果仅包含LineStrings或单个Point,则它们只是“触摸”。如果它包含其他内容(多个Points和/或其他多边形),则它们会重叠。

编辑:
现在,我看到了您的图片,除了disjoint之外,您可能还需要使用touches方法。

10-08 04:52