一种基于geohash的路径获取算法制造技术

技术编号:37634986 阅读:13 留言:0更新日期:2023-05-20 08:55
本发明专利技术涉及一种基于geohash的路径获取算法,首先选一个节点作为源节点,然后记录其余节点到源节点的最短距离和前驱节点;遍历与源节点相连的所有边,更新与之相连的所有节点的最短距离和前驱节点;选择最小权值的边对应的节点来作为下一个节点,直到所有节点均已被访问;用堆的数据结构来实现最小权值边的选择,每次有新的边被访问时,就加入到堆中,并调整堆结构,获取最小权值边的过程就是删除堆顶元素的过程。本发明专利技术能够计算两点间的实际路径,播放实际的轨迹数据,并且能够根据两点的坐标,以及对应的路网数据,完成实际走过的路径计算。计算。

【技术实现步骤摘要】
一种基于geohash的路径获取算法


[0001]本专利技术属于道路交通及GPS定位及导航
,涉及一种基于geohash的路径获取算法,用于地图应用等图论研究。

技术介绍

[0002]路径算法问题是在地图应用等图论研究中的一个重要问题,可以广泛应用在日常公共交通,地图应用等方面。对于有GPS的车辆或者携带GPS设备的人员,其定位数据的实时获取是很多地图应用系统需要用到的部分,并且需要针对实际车辆或者人员查看其一定时间范围内的历史轨迹。但在实际车辆或者人员的gps定位数据中,存在定位数据间隔不一致,或者间断路程定位数据遗漏,或者定位数据连续两点间是折线路径而不是直线,或者需要预测车辆或者人员后续路程的情况,这时需要采用路径算法针对两点间路径进行预测和计算。

技术实现思路

[0003]本专利技术的目的是提出一种基于geohash的路径算法,能得到两点间路径预测数据,能够校准历史轨迹播放数据,以及能够完成当前点位到目标点位的路径预测信息。通过校准历史轨迹数据以及路径信息,并采用迪杰斯特拉算法建立基于时间代价花费最小的路径计算方案,来完成历史轨迹数据遗漏或者预测路径的计算。
[0004]本专利技术的技术方案如下:
[0005]一种基于geohash的路径获取算法,其特征在于包括以下步骤:
[0006](1)选一个节点A来作为源节点,然后对每一个节点分别用min_dis和parent来记录到源节点的最短距离和前驱节点;在最开始,将源节点的min_dis初始化为0,把其他节点初始化为∞,而将所有parent初始化为None;
[0007](2)遍历与A相连的所有边,更新与之相连的所有节点的min_dis和predecessor,用u来表示当前节点,v表示相邻的节点,edge(u,v)来表示u和v相连的边;每一次遍历,都比较u.min_dis和edge(u,v)+v.min_dis的值,如果后者较小,就把v.min_dis更新为edge(u,v)+v.min_dis,并同时使v.predecessor=u;
[0008](3)节点A被访问后,标记为visited;
[0009](4)选择最小权值的边对应的节点来作为下一个节点,这里,然后再重复步骤(2)和(3),直到所有节点均已被访问。
[0010]5)用堆的数据结构来实现最小权值边的选择,每次有新的边被访问时,就加入到堆中,并调整堆结构,获取最小权值边的过程就是删除堆顶元素的过程,从而获取最短路径。
[0011]在实际应用中,GPS数据在路口等转折点的轨迹播放,需要按照路口实际路径进行转折,而不是直接直线跳转。本专利技术能够将两点间的实际路径根据路径算法计算,播放实际的轨迹数据,能够根据两点的坐标,以及对应的路网数据,完成实际走过的路径计算。通过
实际应用可以发现此路径算法是可行的。
附图说明
[0012]图1是本专利技术的一个具体实施例采用的地图。
具体实施方式
[0013]以下通过一个具体实施例对本专利技术的具体实施进行说明。本实施例针对一个含有6个节点A、B、C、D、E、F的地图,如图1所示。
[0014](1)首先,选一个节点来作为源节点(source vertex),这里选择节点A,然后,对每一个节点分别用min_dis和parent来记录到源节点的最短距离和前驱节点(用于寻找最短路径)。在最开始,将源节点的min_dis初始化为0,把其他节点初始化为∞。而将所有parent初始化为None。
[0015](2)接下来遍历与A相连的所有边,更新与之相连的所有节点的min_dis和predecessor。用u来表示当前节点,v表示相邻的节点,edge(u,v)来表示u和v相连的边。每一次遍历,都比较u.min_dis和edge(u,v)+v.min_dis的值,如果后者较小,就把v.min_dis更新为edge(u,v)+v.min_dis,并同时使v.predecessor=u。比如A到B的距离为7,因为B.min_dis=∞,A.min_dis+edge(A,B)=7,所以需要更新更新B.min_dis和B.predecessor为7和A,剩下的节点E和F也同样如此。
[0016](3)节点A被访问后,将其标记为visited。
[0017](4)那么要怎样跳到下一个节点继续上述的过程呢?这里采用贪心策略,选择最小权值的边对应的节点来作为下一个节点。这里,选择节点E,然后再重复前面的步骤(2)和(3),更新节点参数,标记被访问,跳转到下个节点即可。可以看到,节点F的最短距离从原来的6变为了4,而前驱节点从原来的A变为了E。一直重复上面的过程,直到所有节点均已被访问。
[0018](5)同样,可以用堆的数据结构来实现最小权值边的选择,每次有新的边被访问时就加入到堆中,并调整堆结构;而取最小权值边的过程就是删除堆顶元素的过程,从而获得最短路径。
[0019]根据迪克斯特拉算法,每次调整堆结构的时间复杂度为Θ(log|V|),而构建堆需要|E|次,删除堆顶元素至少需要|V|

1次。所以,迪克斯特拉算法的时间复杂度为Θ((|V|

1+|E|)log|V|)。
[0020]在图1所示的实施例中,如果将目标节点设为C、D、F,根据本专利技术的算法,最后的结果为:
[0021]从A到C的最短路径为A

>E

>C,最短距离为4;
[0022]从A到D的最短路径为A

>E

>C

>B

>D,最短距离为10;
[0023]从A到E的最短路径为A

>E

>F,最短距离为4。
[0024]验证了本算法的正确性。
本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于geohash的路径获取算法,其特征在于包括以下步骤:(1)选一个节点A来作为源节点,然后对每一个节点分别用min_dis和parent来记录到源节点的最短距离和前驱节点;在最开始,将源节点的min_dis初始化为0,把其他节点初始化为∞,而将所有parent初始化为None;(2)遍历与A相连的所有边,更新与之相连的所有节点的min_dis和predecessor,用u来表示当前节点,v表示相邻的节点,edge(u,v)来表示u和v相连的边;每一次遍历,都比较u.min_di...

【专利技术属性】
技术研发人员:海文涛何璐璐马英红常玉文
申请(专利权)人:北京航天长峰科技工业集团有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1