在我的 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)来获取边界点。我真的不明白为什么现在这不起作用。
这很可能是因为您的应用程序运行不同版本的
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