如果多边形的任何段相交(包括共线段),它将多边形定义为无效。许多软件包将创建一个具有“裁剪”的区域或区域,如下所示,该区域或区域具有共线段:

>>> 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自然,裁剪可以在本机实现的形状,或同样的几何可以实现为两个有效的多边形,但如果我只有上面所示的点列表,有一个容易“修复”这个(创建有效的几何从这个列表的点)?
发布于 2014-01-01 22:08:57
我找到了一个适用于特定情况的解决方案:
>>> 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)]发布于 2021-09-22 12:10:38
很好地实现了一种解决方案。通过pip,您可以使用任何造型版本的>= 1.8a3并以这种方式导入:
from shapely.validation import make_valid当前版本的shapely可通过pip和conda包括make_valid函数。如果需要安装shapely的旧版本,可以使用shapely实现,如下所示:
def make_valid(ob):
from shapely.geometry.base import geom_factory
from shapely.geos import lgeos
if ob.is_valid:
return ob
return geom_factory(lgeos.GEOSMakeValid(ob._geom))发布于 2021-07-08 23:56:42
还没有经过测试,但现在看来Shapely已经添加了一个功能来支持这个功能。
https://stackoverflow.com/questions/20833344
复制相似问题