如何在形状交叉点保留复杂线

时间:2016-03-03 00:17:25

标签: python geometry intersection shapely geos

我尝试使用Python中的Shapely库将复杂线与多边形相交。不幸的是,Shapely打破了原来的行,所以它返回了一条简单的行。

例如:

# complex line folded back on itself (A-B-A)
ls = shapely.geometry.LineString([(1,0), (1,2), (1,0)])
ls.length == 4.0

# intersected with a covering bounding box
bounding_box = shapely.geometry.Polygon([(0,0), (0,2), (2,2), (2,0)])

intersected = bounding_box.intersection(ls)
# LINESTRING (1 0, 1 2)  - (A-B)
intersected.length == 2.0

您可以看到原始行中的重复组件已消失。我可以理解这种行为的来源,在大多数情况下它可能是理智的选择。

我正在寻找一种方法来进行交叉,以便保留原始的线路信息。在这种退化的情况下,我希望最终得到完全相同的几何形状,一条长度为4的线折叠在自身上。在其他更复杂的情况下,与之相交的多边形将切割原始线,但我仍然需要保留交叉点内的任何重复段。

1 个答案:

答案 0 :(得分:0)

目前,我通过逐行扫描线段来做暴力。

segments = [shapely.geometry.LineString(x) for x in zip(line.coords, line.coords[1:])]

for segment in segments:
    intersected = polygon.intersection(segment)
    # ...

看起来像一个易于矢量化的问题!