背景
有几条线(线段)和一个点。我需要在所有方向上找到最近的线,这意味着 360 度。这个问题与路由算法有关。比如起点不在路上,需要找路,执行Dijkstra或者A*算法。
一个答案是,通过从已知点构建一系列线来进行径向扫描,并在径向线的线之间创建交点。然后与距离进行比较,找到各个方向上最近的直线。链接是:https://gis.stackexchange.com/questions/81613/finding-nearest-line-segments-to-point-using-shapely
但是当角度步长较大时,可能会漏掉一些线条。所以我问上面的问题。
在上图中,相邻径向线之间的角度为 30 度。事实上,已知点可以通过一条径向线到达蓝色圆圈中的线,但不能创建径向线,因为角度步长为 30 度。当角度很小时,例如 10 度,可能会创建一条径向线并与蓝色圆圈中的线相交。
但是角度小的时候很费时间,想找一个高效的方法
问题与后续问题有关。有起点、终点和路线图。但是,起点不在一条线(路)上,我需要在点和图之间做一条路,所以提出这个问题。
我需要找到从起点到终点的最短距离。如何找到绿线
在下图中。
总结
任何人都可以推荐一种替代方法来找到距离所有方向(360 度)的点最近的线。在上面的路由问题中,谁能提供解决方案?
目前使用的是radial sweep,angle step为30。但是角度不是太小,可能会漏掉一些线(路)。有人可以提供更好的解决方案或任何想法吗?
问题的关键 问题的关键是当角度步长较大时,例如30度,径向线不能与一些短线相交。但是,如果角度步长设置为1度,计算时间可能不被接受。
似乎您可以将所有段末端(可能还有段的交集)放入列表/数组中
按角度排序列表
遍历排序列表,保留活动段的附加列表
当你遇到线段的第一个点时,检查它是否比当前最近的线段更近。将段添加到活动列表。
当你遇到线段的最后一个点时,将其从活动列表中删除并检查活动列表中最接近的线段。
例子:
按角度排序后我们有点序列
[A,L,C,M,B,E,D,G,F,I,H,K,J,A_again]
我们需要确定间隔的最近段:
angle interval active segments closest segment
start
-------------------------------------------------------
A KL, AB KL
L AB AB
C AB, CD AB
M AB, CD CD
B CD CD
E CD, EF EF
D EF EF
.....
我不确定我是否明白你在找什么,但乍一看我认为你可以使用 geopandas.sjoin_nearest 找到一个点的最近线?