基于动态预存储的路网轨迹双向查询方法与流程

文档序号:22041971发布日期:2020-08-28 18:13阅读:285来源:国知局
基于动态预存储的路网轨迹双向查询方法与流程

一、技术领域

本发明属于轨迹查询优化领域,主要用于减少轨迹间最短路径查询时的大量重复计算,提高查询效率。

二、

背景技术:

随着物联网的发展,传感器设备不断优化,车辆轨迹数据的采集也变得越来越方便。作为物联网重要应用之一的智慧交通,离不开对大量轨迹数据的查询分析。其中分析轨迹间最短路径的动态变化并找出距离峰值对公交车路线甚至无人自动驾驶车辆的路线规划有着重要的意义。难点在于给定查询轨迹的时间可能并不完全重合,且一段历史轨迹可能会跨路网多个路段,移动对象在这些路段上的速度也并不相同,不利于动态最短路径的计算;并且由于城市路网规模庞大,轨迹间最短路径的计算代价极高,且子轨迹对间存在大量重复计算,大幅降低了查询的效率。

因此如何减少轨迹间最短路径查询中的重复计算是需要解决的重要问题。传统的解决方案会采用预存储部分路网顶点间最短路径来加速查询,然而当移动对象并不落在预存储路径上时,并不能减少子轨迹对之间共同路径的重复计算,所以本发明设计出了一种基于动态预存储的双向搜索算法,该算法减少了大量子轨迹对之间共同路径的计算,优化了传统方法,加快了查询。

三、

技术实现要素:

【发明目的】

为了能够在轨迹间动态最短路径查询时减少子轨迹对之间大量共同路径的重复计算,提高查询效率。

【技术方案】

本发明为轨迹间动态最短路径查询提供了一种优化解决方案,该方案是针对轨迹动态时间规整后的子轨迹对间最短路径查询中存在大量重复计算的问题,设计一种基于动态预存储的路网轨迹双向查询方法。主要步骤如下:

首先将待查询的两条轨迹进行动态时间规整,划分为时间单元相对应的子轨迹对集合,接着将这些子轨迹对所落在路段端点间可能涉及的点对组合进行分组(默认去重),分组方法采用聚类方法,针对分组后的每组点对查询集合分别执行基于动态预存储的双向搜索求得最短路径。得到上述结果后,子轨迹对间查询结果只需加上路段上的一小部分移动即可。最后集合所有子轨迹对间查询结果即可得到待查询轨迹间的动态最短路径。

【有益效果】

本发明所述的基于动态预存储的路网轨迹双向查询算法,优化了基于预存储的传统解决方案,可以减少轨迹间最短路径查询时的大量重复计算,显著提高了查询效率。

四、附图说明

图1动态时间规整

图2子轨迹对应sd点对情况

图3基于动态预存储的双向搜索

五、具体实施方式

下面结合附图对本发明作进一步说明。

本发明主要分为三个部分,第一部分首先对历史轨迹进行动态时间规整,划分成子轨迹对。第二部分是确定子轨迹对分别落到哪些路段,这些路段端点分别组成sd(source-destination)点对集合。对上述点对集合去重后利用聚类方法进行分组。第三部分对分组后的每组点对集合执行基于动态预存储的双向搜索,利用上述结果辅助轨迹间动态最短路径查询得到最终结果。

(1)动态时间规整

由于采样设备的时间并不同步,轨迹片段之间的时间拐点不尽相同,这会对路网动态最短路径查询造成一定困扰,因为如果两移动对象不在同一时间单元内,那么计算他们之间最短路径将毫无意义,并且也会多产生不必要的计算。拐点之间的线段可以看作关于时间的线性方程,可以通过计算确定每个时刻的确定位置,所以需要将两条轨迹重新进行划分,使得轨迹间的拐点相同,如图1所示,两条轨迹的拐点一开始并不完全相同,通过动态时间规整后,可以转换为两条轨迹拐点相同的轨迹。这样操作后,可以使得轨迹最短路径计算更加精确且方便。这样两移动对象之间最短路径查询即可转化为一组子轨迹对之间最短路径查询结果的集合。划分后的子轨迹对满足两个条件:(a)两个子轨迹具有相同的时间段;(b)每个子轨迹表示某一条路段内的运动。

(2)sd点对分组

通过判断上述动态时间规整后的子轨迹对分别落在哪些路段上,可以将路网轨迹间动态最短路径查询问题转化为一个静态问题与动态计算的集合。静态部分是可以将子轨迹对所落在路段的端点组成一系列sd点对,图2左侧是将规整后的子轨迹对应到相应路段上的一个示例,得到的sd点对如图2右侧所示。从上述示例中可以看出子轨迹对所对应的sd点对间可能会存在重复的情况,需要将所有的sd点对去除重复后组成一个查询集合qtsd={po(s1,d1),po(s2,d2),...,po(sn,dn)},n为sd点对的数量,po(si,di)表示一个sd点对之间的最短路径查询。

当移动对象历史轨迹较长且横跨多个路段时,考虑到查询集合qtsd的查询结果集之间可能存在不止一条共同路径,因此可以采用聚类方法将上述查询集合适当分组,从而能够尽可能地减少共同路径的重复计算。分组是基于q-line的聚类算法,确保同一组内的点对集合均是起始点与终止点相对靠近的。

(3)基于动态预存储的双向搜索

分组后,分别针对每组中的点对执行最短路径查询。采用基于动态预计算的双向搜索方法,首先针对每组中的第一对po(s1,d1)查询一条最短路径并保存,以此作为动态预存储的内容,该组中剩余点对间进行最短路径查询时,采用双向搜索,当首尾都扩展到上面保存的第一对间的最短路径上为止,这样中间很长的一段共同路径就不用重复计算了。

算法1给出了基于动态预计算的双向搜索的伪代码,算法输入为路网g以及一组查询集合qtsdsub,输出为上述查询集合对应的路径集合qpathsub。算法第1行初始化相关值。首先计算第一对查询po(s1,d1)的最短路径并保存为pathpre,将该路径放入结果集合中(第2-3行)。剩下的点对之间查询都是基于第一对的查询结果。过程如下:首先从起始点si向外扩展,每扩展一条边就将其放入pathtemp中,当扩展到预计算的第一对点之间的最短路径上时跳出while循环,通过回溯算法可以从扩展过的边pathtemp中还原起始点si到连接到pathpre前的那一段最短路径(第5-10行)。还存在另一种情况,即起始点到终止点最短路径不经过第一对点之间的最短路径,此时回溯得到的就是从起始点si到终止点di的一条完整路径path(si,di)(第11-12行)。从终止点di开始向外扩展时的情况与从起始点向外扩展类似(第13-20行)。假设从两边搜索都能够连接到第一个点对之间最短路径上时,截取中间一段共同的最短路径pathmid,再加上起始点si,连接到pathpre前的那一段最短路径以及终止点di连接到pathpre前的那一段最短路径即为最中si到di的一条完整最短路径path(si,di)(第21-24行),最后将每对点之间的查询结果放入结果集合qpathsub中(第25行),以上为算法的全过程。

为了便于理解,给出一个简单示例,如图3所示。假设该组只有两对查询po(s1,d1),po(s2,d2),首先计算s1到d1的一条最短路径pathpre,然后基于该路径计算s2到d2的最短路径,其中虚线部分对应算法中描述的pathmid,s2连接到pathpre前的那一段最短路径对应paths,d2连接到pathpre前的那一段最短路径对应pathd,最终po(s2,d2)的查询结果为paths+pathmid+pathmid。也可能存在s2和d2均无法连接到预先计算的pathpre上的情况,此时的返回结果即为图中红色线所示。

最后结合上述结果对轨迹间动态最短路径查询加以辅助以得到最终结果。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1