我shapely.ops.unary_union在许多 6 边上使用shapely.geometry.Polygon,并获得以下形状A:
注意上部有两条“裂缝”。这些不是有意的,并且可能是由一些浮点边缘情况引起的。
如果您构建B位于 内部的另一个形状A,并且如果A碰巧与这些“裂缝”之一相交,那么A.covers(B)将会是False!
在我的特定情况下,这会导致测试套件失败,因为A.covers(B)它应该是一个不变量。因此我需要以某种方式处理这个问题。我可以使用某种算法来“密封”这些裂缝吗?
在实践中,这些“裂缝”不会影响应用程序的功能,因为我们只关心A覆盖的外边界B。因此,我愿意接受调整各个六边形的解决方案,以便通过引入重叠来消除裂缝。
但是,我无法接受这种形状变化的外边框,因为这实际上将不再测试应用程序的用途。
总而言之,我希望结果看起来像这样(我的手工编辑版本):
您可以通过缓冲和取消缓冲形状来解决此问题。
这是带有小裂缝的多边形的示例:
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必须至少等于裂缝最宽点处裂缝距离的一半。
| 归档时间: |
|
| 查看次数: |
566 次 |
| 最近记录: |