处理几个不精确多边形的一元并中的“裂缝”?

sha*_*ker 3 python shapely

shapely.ops.unary_union在许多 6 边上使用shapely.geometry.Polygon,并获得以下形状A

呈“蜂窝”状的不规则多边形,内部有“裂纹”。

注意上部有两条“裂缝”。这些不是有意的,并且可能是由一些浮点边缘情况引起的。

如果您构建B位于 内部的另一个形状A,并且如果A碰巧与这些“裂缝”之一相交,那么A.covers(B)将会是False

在我的特定情况下,这会导致测试套件失败,因为A.covers(B)它应该是一个不变量。因此我需要以某种方式处理这个问题。我可以使用某种算法来“密封”这些裂缝吗?

在实践中,这些“裂缝”不会影响应用程序的功能,因为我们只关心A覆盖的外边界B。因此,我愿意接受调整各个六边形的解决方案,以便通过引入重叠来消除裂缝。

但是,我无法接受这种形状变化的边框,因为这实际上将不再测试应用程序的用途。

总而言之,我希望结果看起来像这样(我的手工编辑版本):

相同的多边形,没有任何裂纹

Nic*_*ell 5

您可以通过缓冲和取消缓冲形状来解决此问题。

这是带有小裂缝的多边形的示例:

from shapely.geometry import Polygon
bad_polygon = Polygon([[0, 0], [1, 0], [1, 0.4999], [0.5, 0.5], [1, 0.5001], [1, 1], [0, 1], [0, 0]])
Run Code Online (Sandbox Code Playgroud)

多边形裂纹

要修复此问题,请使用buffer()方法稍微扩展形状,然后收缩相同的量。

tol = 1e-4
bad_polygon.buffer(tol).buffer(-tol)
Run Code Online (Sandbox Code Playgroud)

该值tol必须至少等于裂缝最宽点处裂缝距离的一半。

无裂纹