寻找指向所有方向的最近线段?

问题描述 投票:0回答:2

背景

有几条线(线段)和一个点。我需要在所有方向上找到最近的线,这意味着 360 度。这个问题与路由算法有关。比如起点不在路上,需要找路,执行Dijkstra或者A*算法。

一个答案是,通过从已知点构建一系列线来进行径向扫描,并在径向线的线之间创建交点。然后与距离进行比较,找到各个方向上最近的直线。链接是:https://gis.stackexchange.com/questions/81613/finding-nearest-line-segments-to-point-using-shapely

但是当角度步长较大时,可能会漏掉一些线条。所以我问上面的问题。

enter image description here

在上图中,相邻径向线之间的角度为 30 度。事实上,已知点可以通过一条径向线到达蓝色圆圈中的线,但不能创建径向线,因为角度步长为 30 度。当角度很小时,例如 10 度,可能会创建一条径向线并与蓝色圆圈中的线相交。

但是角度小的时候很费时间,想找一个高效的方法

问题与后续问题有关。有起点、终点和路线图。但是,起点不在一条线(路)上,我需要在点和图之间做一条路,所以提出这个问题。

enter image description here

我需要找到从起点到终点的最短距离。如何找到绿线
在下图中。

enter image description here

总结

任何人都可以推荐一种替代方法来找到距离所有方向(360 度)的点最近的线。在上面的路由问题中,谁能提供解决方案?

目前使用的是radial sweep,angle step为30。但是角度不是太小,可能会漏掉一些线(路)。有人可以提供更好的解决方案或任何想法吗?

问题的关键 问题的关键是当角度步长较大时,例如30度,径向线不能与一些短线相交。但是,如果角度步长设置为1度,计算时间可能不被接受。

看下图:

routes geometry gis shapely
2个回答
0
投票

似乎您可以将所有段末端(可能还有段的交集)放入列表/数组中

按角度排序列表

遍历排序列表,保留活动段的附加列表

当你遇到线段的第一个点时,检查它是否比当前最近的线段更近。将段添加到活动列表。

当你遇到线段的最后一个点时,将其从活动列表中删除并检查活动列表中最接近的线段。

例子:

按角度排序后我们有点序列

[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
.....   

0
投票

我不确定我是否明白你在找什么,但乍一看我认为你可以使用 geopandas.sjoin_nearest 找到一个点的最近线?

© www.soinside.com 2019 - 2024. All rights reserved.