加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python-2.7 – ValueError:No可以从null值创建Shapely几何体

发布时间:2020-12-20 11:44:17 所属栏目:Python 来源:网络整理
导读:我在使用cascaded_union时遇到此错误(我也尝试过unary_union,它会产生相同的错误): ValueError: No Shapely geometry can be created from null value 我已经验证我的多边形是有效的.最初polyB无效,但使用buffer(0)将其转换为有效多边形. 对我做错了什么的
我在使用cascaded_union时遇到此错误(我也尝试过unary_union,它会产生相同的错误):

ValueError: No Shapely geometry can be created from null value

我已经验证我的多边形是有效的.最初polyB无效,但使用buffer(0)将其转换为有效多边形.

对我做错了什么的想法?这是我的代码:

from shapely.geometry import Polygon
from shapely.ops import cascaded_union

def combineBorders(a,b):
    polyA = Polygon(a)
    polyB = Polygon(b)
    pols = [polyA,polyB]

    for p in pols:
        if p.is_valid == False:
            p = p.buffer(0)
        print(p.is_valid)

True

True

newShape = cascaded_union(pols) # THIS IS WHERE THE ERROR KEEPS SHOWING UP
    return newShape

Here is a link到polyA,polyB和pols的值(确认它们有效后).我的Ubuntu 14.04服务器上安装了以下版本:

> python-shapely 1.3.0
> libgeos 3.4.2
> python 2.7

解决方法

问题中的问题是缓冲的多边形没有放回列表pols中,因此无效的几何体被传递给cascaded_union

您可以通过以下方式使这更加简单和通用,可以采用任意数量的多边形几何(不仅仅是两个).

def combineBorders(*geoms):
    return cascaded_union([
        geom if geom.is_valid else geom.buffer(0) for geom in geoms
    ])

polyC = combineBorders(polyA,polyB)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读