TypeError:无法解压不可迭代的 MultiPoint 对象

问题描述 投票:0回答:1

在我的 python 应用程序中,我使用的是 Shapely。调用以下函数:

def get_t_start(t_line: geometry.LineString):
    print('get_t_start', t_line.boundary)
    p1, p2 = t_line.boundary
    t_start = p1 if p1.y < p2.y else p2
    return t_start

产生以下输出:

get_t_start 多点 (965 80, 1565 1074) 回溯(最近一次调用最后一次):
... 文件“/sites/mpapp.py”,第 13 行,位于 开始 p1, p2 = t_line.boundary
类型错误:无法解压不可迭代的 MultiPoint 对象

print
t_line.boundary
我猜这个物体没问题。我确信我已经在其他应用程序中像这样使用了这个对象(MULTIPOINT)来获取边界点。我真的不明白为什么现在这不起作用。

python python-3.x shapely
1个回答
0
投票

这很可能是因为您的应用程序运行不同版本的

shapely
。从 Shapely 1.8 开始,多部分几何图形(如 MultiPoint)的迭代已被弃用,并在 Shapely 2.0 中被删除(了解更多)。

所以,你只需要访问边界的

geoms
:

from shapely import LineString, Point

def get_t_start(t_line: LineString) -> Point:
    print("get_t_start", t_line.boundary)
    p1, p2 = t_line.boundary.geoms           # << here
    t_start = p1 if p1.y < p2.y else p2
    return t_start

输出:

from shapely import from_wkt

line = from_wkt("LINESTRING (965 80, 1565 1074)")

>>> get_t_start(line)

# get_t_start MULTIPOINT (965 80, 1565 1074)

# + a display of the point
© www.soinside.com 2019 - 2024. All rights reserved.