访问Shapely MultiPoint中的单个点

5

我正在使用Python中的Shapely库。我要找到两条线的交点,返回值是一个MultiPoint对象。

我该如何解构这个对象以获取交点的各个坐标?

以下是代码:

from shapely.geometry import LineString, MultiLineString
a = LineString([(0, 1), (0, 2), (1, 1), (2, 0)])
b = LineString([(0, 0), (1, 1), (2, 1), (2, 0)])
x = a.intersection(b)

输出:

print(x) 
MULTIPOINT (1 1, 2 0)

因此,在这种情况下,我要寻找一种方法来提取交点(1,1)和(2,0)。

2个回答

6
您可以对生成的MultiPoint进行索引:
>>> str(x)
'MULTIPOINT (1 1, 2 0)'
>>> print(len(x))
2
>>> print(x[0].x)
1.0
>>> print(x[0].y)
1.0

如果您想创建一个包含坐标的新列表,可以使用以下方法:

>>> [(p.x, p.y) for p in x]
[(1.0, 1.0), (2.0, 0.0)]

如果有三个交点,你会得到一个MultiPoint和一个LineString? - Chris B
6
我已经安装了shapely==2.0.0,但现在MultiPoint不能迭代或者下标索引。 :/ - s.paszko
4
尝试使用 x.geoms[0](参见此处)。 - Max Peglar-Willis

2
使用.geoms
from shapely.geometry import LineString
a = LineString([(0, 1), (0, 2), (1, 1), (2, 0)])
b = LineString([(0, 0), (1, 1), (2, 1), (2, 0)])

multipoint = a.intersection(b)
print(multipoint)
#MULTIPOINT (2 0, 1 1)
points = [p for p in multipoint.geoms]
print(points)
#[<POINT (2 0)>, <POINT (1 1)>]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接