修复无效的多边形| Python身材匀称

时间:2013-12-30 04:27:51

标签: python geometry shapely

如果Polygon的任何段相交,则Shapely将Polygon定义为无效,包括colinear的段。许多软件包将创建一个带有“切口”的区域或区域,如此处所示,其具有共线段:

enter image description here

    >>> 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中本地实现,或者这个相同的几何体可以实现为两个有效的多边形,但是如果我只有上面显示的点列表,那么是否容易“修复”这个(创建有效的)这个点列表中的几何图形?)

2 个答案:

答案 0 :(得分:37)

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

    >>> 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)]

答案 1 :(得分:1)

未经测试,但似乎 Shapely 现在添加了一个功能来支持此功能。

https://shapely.readthedocs.io/en/latest/manual.html#validation.make_valid