使用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服务器上安装了以下版本:
答案 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