一种快速导航路径推测方法与流程

文档序号:14784638发布日期:2018-06-27 21:59阅读:225来源:国知局

本发明涉及一种路径推测的快速方法,通过预先计算某一范围内的路链行驶树,快速推测一定范围内两条路链之间的行驶路径的方法。



背景技术:

在公交GPS推测公交线路,及浮动车GPS推测路况拥堵情况等场景中,往往需要快速推测两个连续GPS点所经过的路链,由于采集频率的问题,两个连续GPS点中间往往跨越了较长距离,可能经过了多条路链。采用普通方法,需要实时进行计算,所需时间和内存都较大。

为了解决上述问题,发明了快速导航路径推测方法,使用缓存技术,可快速、准确地推测出两个短时间内GPS点所经过的路链,提供给其它系统使用。



技术实现要素:

针对现有技术中存在的上述问题,本发明提供一种快速导航路径推测的方法。

为实现上述目的,本发明采用以下技术方案。

一种快速导航路径的推测方法,从每条路链起始,生成500米范围内的路链行驶树(RouteTree),路链行驶树的每个节点(RouteLinkNode)即是一条路链;路链行驶树保存了从根路链到此路链的行驶距离,路链行驶树的父节点id及在此路链上的行驶方向,是否是叶子节点信息。

该方法包括以下步骤:

步骤1:路链行驶树生成;

循环所有路链,针对其中一条路链,生成根节点。

获取根节点所能行驶到的所有路链作为子路链,生成子节点,存入以路链id为key的子节点map中。

循环所有子路链,获取每个子路链所能行驶到的路链作为二层子路链,如果存在通过不同子路链抵达的同一个二层子路链,则只保存距离短的路链。如果距离已超过500米范围,则不追加子路链。

递归加载所有层级的子路链到子节点map,直到所有500米范围内能抵达的路链都加入到子节点map中。

循环子节点map,生成子节点list和父节点list,子节点list和父节点list做集合相减,得到不是任何节点的父节点,即叶子节点list,设置到相应节点中。

将此路链行驶树存入以根节点id为key的所有路链树map中。

步骤2:缓存查找

输入要查找的起始路链和终止路链。在所有路链树map中查找以起始路链为根路链的路链树。

判断终止路链是否在此路链树的子路链中,如果在,则从终点路链回溯到根路链,逆序,获取起始路链到终止路链之间的路径。如果终止路链不在此路链树的子路链中,则进入扩展查找模式。

步骤3:启发式查找

如果终止路链不在此路链树的子路链中,则认为终止路链距起始路链较远,采用启发式算法思维,获取此路链树的所有叶子节点,筛选出直线距离终止路链最近的4个叶子节点。

循环4个叶子节点,以每个叶子节点作为新的起始路链,查找是否有到终止路链的路径。

递归进行查找,直到在某一层找到多条路径,选取其中最短的路径,回溯到原始的起始路链,将各段路链进行拼接,形成完整的路径。

与现有技术相比,本发明具有以下明显的优势:

在500米范围内,以武汉市为里,一个城市的所有路链行驶树大小在300MB左右,查找速度基本在常数时间复杂度范围内,在500米范围外,也能取得较短的查找时间,尤其是对于上文提到的背景应用,绝大多数连续的两个GPS点,距离不会超过500米,用此方法取得了较好的时间和空间平衡。

具体实施方式

下面结合具体实施方式对本发明做进一步说明。

具体实施方式以武汉市公交行业综合业务管理系统中的公交线路管理平台为例。

武汉市公交行业综合业务管理系统是武汉市公交办为管理武汉市1万余辆公交车、2万公交车司乘人员、700多条线路、近6000个站点即其它相关附属设施而专门建设的管理系统。主要的功能是显示全市公交线路、站点的分布情况,新增、修改公交线路,查看公交车的实时地理位置、按区域或公交线路、站点分析运营速度、驻站时间、准点率、兑现率、查找定位单个公交车、查看单个公交车历史轨迹、历史轨迹模糊搜索等。该系统由应用服务器、GIS服务器、数据库服务器组成。其中服务器型号为浪潮英信NF8460M4服务器,2个2.1GHz CPU,内存64G,300G存储。系统的主要数据,来源于数据中心发送的全市1万辆公交车GPS及刷卡数据。公交车GPS及刷卡数据由安装在公交车上的移动设备发出,一般一分钟发送3-4次。系统从行业数据中心接收到的GPS数据1500条左右每秒。

本发明所述的方法包括以下步骤:

步骤1:路链行驶树缓存生成,包括以下步骤:

步骤1.1循环所有路链,针对其中一条路链,生成根节点。

从地铁线路库中读取地铁线路基本信息。

步骤1.2获取根节点所能行驶到的所有路链作为子路链,生成子节点,存入以路链id为key的子节点map中。

步骤1.3循环所有子路链,获取每个子路链所能行驶到的路链作为二层子路链,如果存在通过不同子路链抵达的同一个二层子路链,则只保存距离较短的那个方向。如果距离已超过500米范围,则不追加此子路链。

步骤1.4递归加载所有层级的子路链到子节点map,直到所有500米范围内能抵达的路链都加入到子节点map中。

步骤1.5循环子节点map,生成子节点list和父节点list,两者做集合相减,得到不是任何节点的父节点,即叶子节点list,设置到相应节点中。

步骤1.6将此路链行驶树存入以根节点id为key的所有路链树map中。

步骤2:缓存查找,包括以下步骤:

步骤2.1输入要查找的起始路链和终止路链。在所有路链树map中查找以起始路链为根路链的路链树。

步骤2.2判断终止路链是否在此路链树的子路链中,如果在,则从终点路链回溯到根路链,逆序,获取起始路链到终止路链之间的路径。

步骤2.3如果终止路链不在此路链树的子路链中,则进入扩展查找模式。

步骤3:启发式查找包括以下步骤:

步骤3.1获取此路链树的所有叶子节点

步骤3.2计算所有叶子节点到终止路链的直线距离

步骤3.3排序并筛选出直线距离最短的4个叶子节点。

步骤3.4循环4个叶子节点,以每个叶子节点作为新的起始路链。

步骤3.5递归进行查找,直到在某一层找到多条路径。

步骤3.6选取其中最短的路径,回溯并拼接每一段路链,直到原始的起始路链,形成完整的路径。

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