ValueError:No可以从null值创建Shapely几何体

时间:2015-07-13 18:52:26

标签: python-2.7 shapely

使用cascaded_union时出现此错误(我也尝试unary_union产生相同的错误):

  

ValueError:无可以从空值

创建Shapely几何体

我已经验证我的多边形是有效的。最初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)
  

     

    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

2 个答案:

答案 0 :(得分:6)

问题中的问题是缓冲的多边形没有放回列表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)

答案 1 :(得分:1)

发现问题所在。不确定为什么这很重要(我已经看到两种方式都显示了这些例子),但是在将多边形直接放入cascaded_union之后就可以了:newShape = cascaded_union([polyA, polyB])。以下是完全修订的代码:

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

def combineBorders(a, b):
    polyA = Polygon(a)
    polyB = Polygon(b)
    polyBufA = polyA.buffer(0)
    polyBufB = polyB.buffer(0)
    newShape = cascaded_union([polyBufA, polyBufB])
    return newShape

这也适用于unary_union