首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >修整形状中的无效多边形

修整形状中的无效多边形
EN

Stack Overflow用户
提问于 2013-12-30 04:27:51
回答 6查看 39.8K关注 0票数 53

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

代码语言:javascript
复制
>>> 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

自然,裁剪可以在本机实现的形状,或同样的几何可以实现为两个有效的多边形,但如果我只有上面所示的点列表,有一个容易“修复”这个(创建有效的几何从这个列表的点)?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2014-01-01 22:08:57

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

代码语言:javascript
复制
>>> 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)]
票数 57
EN

Stack Overflow用户

发布于 2021-09-22 12:10:38

很好地实现了一种解决方案。通过pip,您可以使用任何造型版本的>= 1.8a3并以这种方式导入:

代码语言:javascript
复制
from shapely.validation import make_valid

当前版本的shapely可通过pip和conda包括make_valid函数。如果需要安装shapely的旧版本,可以使用shapely实现,如下所示:

代码语言:javascript
复制
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))
票数 8
EN

Stack Overflow用户

发布于 2021-07-08 23:56:42

还没有经过测试,但现在看来Shapely已经添加了一个功能来支持这个功能。

valid

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20833344

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档