如何在Shapely交集中保持复杂的直线

2024-04-25 12:31:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用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的线折叠起来。在其他更复杂的情况下,我与之相交的多边形将分割原始直线,但我仍然需要在相交处保留任何重复的线段。在


Tags: boxline情况多边形lengthls直线geometry
1条回答
网友
1楼 · 发布于 2024-04-25 12:31:06

目前,我正在用蛮力一个接一个地画线段。在

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

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

似乎是一个很容易矢量化的问题!在

相关问题 更多 >