一种快速检索公交换乘方案的方法与流程

文档序号:14735897发布日期:2018-06-19 20:28阅读:456来源:国知局
一种快速检索公交换乘方案的方法与流程

本发明涉及一种公交换乘的快速检索换乘方案的方法,在海量的可能的公交线路组合中,通过预先计算直达和步行换乘作为缓存、实时计算多次换乘,查找最优的换乘方案的快速方法。



背景技术:

公交换乘检索是计算机系统接收公交站点对输入、通过查询城市公共交通线路及站点数据,得到从起点站出发、经过乘车、中间站点换乘、步行等方式抵达终点站的综合方案的技术。公交换乘检索系统是城市公共交通服务的重要组成部分,在城市普通市民、旅游者有着重要作用。系统通过PC端、Web端、移动端等方式提供服务,在GIS地图上显示规划线路、并提供文字说明,方便市民和旅游者的日常工作、学习、参观游览等的交通需求。随着城市公共交通线路的增多,城市的扩张,站点之间的换乘方案也越来越复杂,使用传统方法检索方案的响应时间也越来越长。

为了解决上述问题,公交换乘检索系统使用了缓存技术、预先计算能直达和步行直达的站点对,放入缓存中,在多次换乘中,可经过较少次的循环,对已经存在的直达方案进行组合,生成二次、三次及以上的换乘方案。



技术实现要素:

针对现有技术中存在的上述问题,本发明提供一种通过建立直达和步行直达站点对的缓存结构,大幅缩短换乘方案检索时间,实现全市域公交换乘方案检索的流程。

为实现上述目的,本发明采用一种快速检索公交换乘方案的缓存结构,该缓存结构从小到大包括以下四个层级:

换乘段(Segment):指完整不可分割的一段步行(WalkSegment)、或乘坐公交车 (BusSegment)、或乘坐地铁(SubwaySegment)的出行方式。

换乘方案(TransferPlan):指由多个换乘段(Segment)构成的、从起点站到终点站完成的换乘计划。包括了整个换乘方案的总距离、总步行距离、总花费时间、总金额和总换乘次数等信息。

换乘方案缓存(TransferCache):指包含多个换乘方案(TransferPlan)的一对站点对的换乘方案的集合,包括了对换乘方案数量的统计、纯公交方案的统计、纯地铁方案的统计和各换乘次数方案的统计等。

换乘矩阵(MatrixCache):是一个双重HashMap,HashMap的外层key是起点站点的id, HashMap的内层key是终点站点的id,value是起点和终点间的换乘方案缓存(TransferCache)。

计算机内存所保存的缓存数据由公交线路数据、公交站点数据、公交线路所包含的站点数据、公交站点所包含的公交线路数据、一定距离(500m)内公交站点对步行可达矩阵数据、预先计算的直达和步行直达能够连通的公交站点对,以及无需计算换乘方案的站点对集合 (needlessPairSet:两站点间距离太近等情况)等数据组成。

公交线路和站点及相互关联的基础数据从数据库读取。一定距离内公交站点对步行可达矩阵由基础数据计算两两站点距离生成。直达站点对数据由公交站点所包含的公交线路数据做集合相交运算获得。步行直达包含三种情况,第一种是指从起点站步行一段距离到达上车站、然后直达抵达终点站,第二种是指从起点站坐车到达下车站、再步行一段距离到达终点站,第三种是指从起点站步行一段距离到达上车站、在下车站下车后,步行一段距离到达终点站,这种情况要保证前后的步行距离总和不超过限定的最大步行距离。

一种快速检索公交换乘方案的方法:该方法包括以下步骤:

步骤1:建立基础数据缓存

从数据库读取公交线路及站点的基础数据,分别保存到以线路id和站点id为key,以线路详情和站点详情为value的Hashmap(lineMap和stationMap)中。按顺序读取某条线路的各个站点,存入List中,作为value,同样以线路id为key,保存到另一个Hashmap(lineStationMap) 中;读取某个站点所经过的所有线路,存入List中,作为value,以站点id为key,保存到另一个Hashmap(stationLineMap)中。

步骤2:构造步行可达矩阵

双重循环stationMap的每一个站点,分别作为起点和终点,排除掉起点和终点id相同的情况,根据两站点的空间距离,如果在500m范围内,则构造步行换乘段对象作为value。存入以“起点id-终点id”为key的HashMap(walkMap)中。

由于城市的公交站点数量往往以千计数,因此在步骤2中,需要一些加速方式:

1)在计算两站点的空间距离之前,先判断从终点到起点是否已在矩阵中,如果存在,则直接将步行换乘段的起终点互换存入矩阵。

2)计算两站点间的步行段,是另一个复杂的算法,且需要步行导航图等基础数据的支持,由于城市中的局部道路网络属于网格结构,因此对于公交换乘采用两点间的曼哈顿距离作为步行距离进行判断,从而加速步行段距离计算。

3)对于步行距离<300m的站点对,及站点id不同,但名称相同且距离也很近的站点(往往是同一条线路两个方向的同一个站点),对乘客而言直接步行抵达即可,因此存入needlessPairSet中,在后续计算直达及多次换乘时,可直接跳过,从而加速检索速度。

4)对于地铁站点,一个站点往往对应了多个出入口,在计算步行距离时,如果在500m 范围内,进一步循环判断距离最近的出入口,将出入口信息设置到步行段中。

步骤3:计算直达站点对

与计算步行可达站点对类似,双重循环stationMap中的每一个站点,跳过id相同和 needlessPairSet中的站点。对起点站点的关联线路List和终点站点的关联线路List取交集,如果交集不为空,并且对交集中的每条公交线路,起点所属的站点序号比终点所属的站点序号要小,则两站点之间有直达方案,并将方案存入MatrixCache中。

步骤4:计算步行直达站点对

1)计算先步行再坐车的方案。

双重循环stationMap中的每一个站点,跳过id相同、在needlessPairSet中,且已经有直达方案的站点对。循环起点站点的所有步行可达站点、判断每个站点到终点站点的直达情况,对于有直达方案的,将步行段与坐车段合并,组合步行直达的方案,存入起终点的 TransferCache中。

2)计算先坐车再步行的方案。

双重循环stationMap中的每一个站点,跳过id相同、在needlessPairSet中,且已经有直达方案的站点对。循环终点站点的所有步行可达站点、判断起点到每个站点的直达情况,对于有直达方案的,将坐车段与步行段合并,组合步行直达的方案,存入起终点的TransferCache 中。

3)计算先步行再坐车再步行的方案。

双重循环stationMap中的每一个站点,跳过id相同、在needlessPairSet中,且已经有直达方案的站点对。双重循环起点站点和终点站点的所有步行可达站点、判断起点步行站点到终点步行站点的直达情况,对于有直达方案的,将前后步行段与坐车段合并,组合步行直达的方案,存入起终点的TransferCache中。

4)结果选优

对于步骤4中1)-3)三种出行方式的结果,筛选并保留不超过三条方案,存入MatrixCache 中;这三条方案指的是根据步行距离、总时间、总距离、总花费等综合因素评估得出。

步骤5:计算多次换乘方案

通过步骤1-4将所有需要缓存的方案计算出来,接下来,对于用户输入的任意一个站点对,首先从MatrixCache中查找是否已有方案,如果没有或已有方案数量小于3,则进行多次换乘方案查询。

多次换乘方案的逻辑与步行直达类似,采用N=1+(N-1)的方式,N为换乘次数,循环起点的所有直达站点,然后判断此途径站点与终点站点是否有N-1次的换乘方案。对于查找需要乘坐两次车的换乘,则N=2,N-1=1即直达或步行直达。N=3,则N-1=2,如果此时途径点到终点的换乘方案尚不存在,则深入一层计算此站点对的二次换乘方案,即进行递归查询。中间结果和最终结果也存入MatrixCache中,当下次用户查询到同样的站点对,就无需再次计算。

由于起点的直达途径站点往往上百个直达,递归查询,效率较低,因此采用以下控制方法提交查询的效率:

1)预先筛选途径站点并排序

筛选条件包括:

●途径点和终点不能在needlessPairSet中;

●当起点和终点都是地铁站点时,途径点也必须是地铁站点中的换乘站;

●起点到途径点的直线距离与途经点到终点的直达距离之和不能超过起终点直线距离的一定倍数;对于山区或多河流城市,此值可设大一些,对于平原城市,此值可设小些;

●在之前用户的查询中,经过多次计算后已经清楚知道此站点对没有N-1次的换乘方案,在内存中分别保存twiceNoneMap/thriceNoneMap/fouriceNoneMap三个HashMap,即每个站点经过二次、三次、四次换乘所不能到达的站点;

2)利用已计算的方案限制未计算的方案

在每一次循环途径站点时,利用之前多次循环已经取得的方案中的最小值或平均值,限制新方案的途经点与起终点直线距离之比、总步行距离、总距离等值、从而快速跳过大于设定阈值的方案。

3)当有一定数量结果时,跳出循环

若用户需要5种换乘方案,当计算出10种方案后,跳出循环,分别计算个方案的综合花费、筛选出花费从小到大排名前5的方案。

4)超时控制

当整个查询时间超过5s中,跳出循环,此时有多少方案就保留多少方案,如果没有,则说明两个站点对位置过偏,得出乘车前往的建议。

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

现有的技术方案、采用实时计算,一旦遇到三次及以上换乘才能抵达的站点对,计算速度会超过10s。从实际系统中测得,经过此方案预先计算缓存后,3次甚至4次换乘的站点对,也能在5秒之内得出结果,直达或二次换乘方案,往往不超过300ms。

附图说明

图1;公交换乘方案缓存计算流程图

图2;公交换乘方案查询流程图

图3;公交换乘方案效果图

图4:符合条件的换乘方案图

图5:并提供多种策略选择图

具体实施方式

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

本方法以武汉市公交行业综合业务管理系统中的公交换乘平台为例。

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

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

建立基础数据缓存,包括以下步骤:

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

步骤1.2从地铁站点库及线路库中读取地铁站点基本信息及地铁线路与站点关联信息。

步骤1.3从地铁出入口库中读取地铁出入口信息。

步骤1.3从公交线路库中读取公交线路基本信息。

步骤1.2从公交站点库及线路库中读取公交站点基本信息及公交线路与站点关联信息。

构造步行可达矩阵,包括以下步骤:

步骤2.1双重循环stationMap的每一个站点,分别作为起点和终点。

步骤2.2跳过起点和终点id相同的情况。

步骤2.3从walkMap中查找终点到起点是否已有可达步行段。

步骤2.4如果有,将步行段转换起终点,存入walkMap中。

步骤2.5如果没有,计算两站点的曼哈顿距离,跳过在500m范围外的。

步骤2.6如果起终点有一个是地铁站店,进一步循环地铁站店的所有出入口,查找距离最近的出入口。

步骤2.7构造步行段数据存入walkMap中。

步骤2.8对于距离在300m范围内的,存入needlessPairSet中。

计算直达站点对包括以下步骤:

步骤3.1双重循环stationMap的每一个站点,分别作为起点和终点。

步骤3.2跳过id相同的,及在needlessPairSet中的站点对。

步骤3.3对起点与终点所经过的线路集合做交集,取交集不为空的情况。

步骤3.4判断交集中的每条线路,取起点序号小于终点序号的情况。

步骤3.5构造乘车段数据存入缓存中。

计算步行直达站点对包括以下步骤:

步骤4.1计算先步行后乘车的方案:

步骤4.1.1双重循环stationMap的每一个站点,分别作为起点和终点。

步骤4.1.2跳过id相同的,及在needlessPairSet中存在的,及已存在直达线路的站点对。

步骤4.1.3循环起点站点的所有步行可达站点。

步骤4.1.4判断每个站点到终点站点的直达情况,对于有直达方案的,将步行段与坐车段合并,组合步行直达的方案,存入起终点的方案缓存中。

步骤4.2计算先乘车后步行的方案:

步骤4.2.1双重循环stationMap的每一个站点,分别作为起点和终点。

步骤4.2.2跳过id相同的,及在needlessPairSet中存在的,及已存在直达线路的站点对。

步骤4.2.3循环终点站点的所有步行可达站点。

步骤4.2.4判断起点站点到每个站点的直达情况,对于有直达方案的,将乘车段与步行段合并,组合步行直达的方案,存入起终点的方案缓存中。

步骤4.3计算先步行后乘车再步行的方案:

步骤4.3.1双重循环stationMap的每一个站点,分别作为起点和终点。

步骤4.3.2跳过id相同的,及在needlessPairSet中存在的,及已存在直达线路的站点对。

步骤4.3.3循环起点站点的所有步行可达站点,及终点站点的所有步行可达站点。

步骤4.3.4判断每个起点步行可达站点到每个终点步行可达站点的直达情况,对于有直达方案的,将前后步行段与乘车段合并,组合步行直达的方案,存入起终点的方案缓存中。

步骤4.4对于前三个步骤的结果,根据步行距离、总时间、总距离、总花费等综合因素、保留其中的比较好的方案不超过3条,存入MatrixCache中。

至此所有缓存计算完成,当用户输入起终点站点时,后台计算的步骤如下:

步骤5.1判断MatrixCache是否已有起终点的换乘方案。

步骤5.2如果有换乘方案,且方案数量达到用户请求数量要求,直接返回方案结果。

步骤5.3进入多次(N次)换乘方案计算,N=2

步骤5.3.1循环起点的所有直达站点作为途径站点

步骤5.3.2判断此途径站点与终点站点是否有(N-1次)的换乘方案。

步骤5.3.3如果N-1=1,则直接从缓存中查找直达或步行直达的方案,没有就跳过。

步骤5.3.4如果N-1>1,如果缓存中有方案,则直接取出,如果没有,则深入一层,计算途径站点到终点站的N-1次换乘方案。

步骤5.3.3如果有方案,将前后方案合并,作为起点到终点的方案。

步骤5.3.4循环结束,判断结果筛选后是否符合用户要求,符合则直接返回。

步骤5.3.5将已计算的结果存入缓存,N=3,跳转步骤5.3.1,直到方案数量足够或N=5 的情况计算完成。

步骤5.4计算完成,返回换乘方案结果。

快速搜索公交换乘方案的方法效果图如图3所示:在右边面板中,输入起始站点,终点站点,点击查询后,能够很快查找出符合条件的换乘方案(图4)、并提供多种策略选择(图 5)。

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