如果多边形的任何段(包括共线的段)相交,则将Shape定义为无效。许多软件包都会创建带有“切口”的区域或区域,如下所示,该区域具有共线段:

python - 修复Shapely中的无效多边形-LMLPHP

>>> pp = Polygon([(0,0), (0,3), (3,3), (3,0), (2,0),
                  (2,2), (1,2), (1,1), (2,1), (2,0), (0,0)])
>>> pp.is_valid
WARNING:shapely.geos:Self-intersection at or near point 2 0
False

自然,可以在Shapely中本地实现切口,或者可以将相同的几何图形实现为两个有效的多边形,但是如果我仅具有上面显示的点列表,是否可以轻松地“修复”此图形(从此创建有效的几何图形)点列表)?

最佳答案

我找到了一种适用于特定情况的解决方案:

>>> pp2 = pp.buffer(0)
>>> pp2.is_valid
True
>>> pp2.exterior.coords[:]
[(0.0, 0.0), (0.0, 3.0), (3.0, 3.0), (3.0, 0.0), (2.0, 0.0), (0.0, 0.0)]
>>> pp2.interiors[0].coords[:]
[(2.0, 1.0), (2.0, 2.0), (1.0, 2.0), (1.0, 1.0), (2.0, 1.0)]

10-08 05:12