ValueError: No Shapely geometry can be created from null value
ValueError: No Shapely geometry can be created from null value
我在使用 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-匀称 1.3.0
- libgeos 3.4.2
- python 2.7
找到问题了。不知道为什么这很重要(我已经看到了两种方式的示例),但是在将多边形直接放入 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
题目中的问题是缓冲的多边形没有放回列表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)
我在使用 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-匀称 1.3.0
- libgeos 3.4.2
- python 2.7
找到问题了。不知道为什么这很重要(我已经看到了两种方式的示例),但是在将多边形直接放入 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
题目中的问题是缓冲的多边形没有放回列表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)