Python ValueError:无法从空值创建任何形状几何体
我在使用Python ValueError:无法从空值创建任何形状几何体,python,shapely,Python,Shapely,我在使用cascaded\u union时出现此错误(我还尝试了uniary\u union,这会产生相同的错误): ValueError:无法从空值创建任何形状几何体 我已验证我的多边形是否有效。最初,polyB无效,但使用buffer(0)将其转换为有效多边形 知道我做错了什么吗?这是我的密码: from shapely.geometry import Polygon from shapely.ops import cascaded_union def combineBorders(a,
cascaded\u union
时出现此错误(我还尝试了uniary\u union
,这会产生相同的错误):
ValueError:无法从空值创建任何形状几何体
我已验证我的多边形是否有效。最初,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
真的
polyA、polyB和pols的值(确认有效后)。我的Ubuntu 14.04服务器上安装了以下版本:
- python shapely 1.3.0
- libgeos 3.4.2
- python 2.7
- 发现了问题。不知道为什么这很重要(我已经看到了两种方式的例子),但它在将多边形直接放入级联的联合体后起作用,就像这样:
newShape=cascaded的联合体([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
这也适用于
一元联合
问题在于缓冲多边形没有放回列表pols
,因此无效几何体被传递到级联联合
您可以通过以下操作使其更简单、更通用,这些操作可以采用任意数量的多边形几何体(而不仅仅是两个)
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
def combineBorders(*geoms):
return cascaded_union([
geom if geom.is_valid else geom.buffer(0) for geom in geoms
])
polyC = combineBorders(polyA, polyB)