1
Line1_string=LineString([(1,4),(3,4),(3,3),(3.5,2),(4.5,1),(6,1)])

line2_string=LineString([(5,4),(2,1)])

这两个对象是使用LineStringfrom创建的shapely.geometry

我可以使用 找到交点Line1_string.intersection(line2_string).coords,但我还想定义Line_string1这两条线的交点以自动方式发生的线段。

到目前为止,我已经遇到了这个答案 [a link] (Get the vertices on a LineString any side of a Point),但我从定义的拆分函数中得到了一个无输出。

关于什么可能是错误的任何想法或任何其他建议?

4

1 回答 1

0

分解Line1_string成一个简单的线段列表,并检查每个线段是否相交。

使用pairwise来自 itertools 的配方

from itertools import tee
def pairwise(iterable):
    "s -> (s0,s1), (s1,s2), (s2, s3), ..."
    a, b = tee(iterable)
    next(b, None)
    return izip(a, b)

# Convert input line into list of line segments
Line1_segs = [LineString(p) for p in pairwise(Line1_string.coords[:])]

# Find the intersections
intersect_segs = [i for i, s in enumerate(Line1_segs) if line2_string.intersects(s)]
print(intersect_segs)  # [2]

交叉点发生在第 2 项或第三段上。请注意,您可能会得到多个交点,尤其是当交点位于连接两个或多个线段的顶点时。

于 2014-12-02T02:21:46.953 回答