Line1_string=LineString([(1,4),(3,4),(3,3),(3.5,2),(4.5,1),(6,1)])
line2_string=LineString([(5,4),(2,1)])
这两个对象是使用LineString
shapely.geometry
创建的
我可以使用Line1_string.intersection(line2_string).coords
找到交点,但我还想定义Line_string1
的线段,这两条线的交点是以自动方式进行的。
到目前为止,我已经遇到过这个答案[链接](Get the vertices on a LineString either side of a Point),但我从定义的拆分函数中得到了无输出。
任何可能出错的想法或任何其他建议?
答案 0 :(得分:0)
将Line1_string
分解为简单线段列表,并检查每个线段是否相交。
使用pairwise
recipe from 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项或第3段。请注意,您可能会获得多个交点,尤其是交点位于连接两个或更多段的顶点上时。