基于海量电子地图的路网连通性的检测方法及装置 【技术领域】
本发明涉及导航技术领域,尤其涉及一种基于海量电子地图的路网连通性的检测方法及装置。
背景技术
路径规划是智能交通系统研究的重要内容,可在车辆行驶前或行驶过程中为驾驶员提供从起始点到目标点的一条或若干条路线,用来对驾驶员的行车进行导航。在电子地图路径规划中需要根据路况信息进行数据编译,并且在编译过程中,如果路网中存在孤岛道路群,则会对各种路径算法的效率造成不同程度的损失。因此路网连通性的检测,对于电子地图供应商来说,是衡量数据优劣的重要标准之一。
对路网连通性的检测实际上就是查找出路网中的强连通分量,现有的强连通分量的计算算法有Kosaraju算法。在Kosaraju算法中为了查找有向图中的强连通分量,首先把原图逆序(逆图)然后运行DFS(Depth First Search,深度优先搜索)遍历,计算每个顶点访问结束时间编号(时间戳或者理解成后序遍历的编号)。把计算出来的编号按重大到小排序,接着在原图上运行DFS遍历,由此可知在Kosaraju算法中需要进行两次DFS遍历,即一次正向遍历,一次反向遍历。
在实现本发明的过程中,发现现有技术中至少存在如下问题:
1)在现有的Kosaraju算法中由于需要进行两次DFS遍历,因此降低了检测海量路网信息连通性的效率。
2)现有的连通检测算法无法解决线性拓扑禁止策略问题。
【发明内容】
为了解决上述问题,本发明的目的是提供一种基于海量电子地图的路网连通性的检测方法及装置,提高了检测海量的路网信息连通性的效率和准确度。
为了达到上述目的,本发明提供一种基于海量电子地图的路网连通性的检测方法,所述检测方法包括:
根据所述路网中道路的交通流方向,将所述路网构造为路网的逻辑拓扑图;
在所述路网的逻辑拓扑图中任意选取一条道路设置为起始道路;
按照所述路网中起始道路的交通流方向,在所述路网的逻辑拓扑图中读取出相互连接的道路;
检测被读取出的道路是否预先设置有交通规制信息,若没有,则按照所述交通流方向继续读取所述路网的逻辑拓扑图中的其他道路,直到按照所述交通流方向返回到所述起始道路。
优选地,当检测出被读取出的道路预先设置有交通规制信息时,所述检测方法还包括:
按照交通流的方向逆向退回到与该条道路连接的其他道路上。
优选地,所述根据所述路网中所有道路的交通流方向将所述路网构造为逻辑拓扑图的步骤为:
获取所述路网中所有道路的连接关系,根据所述连接关系构造出路网的物理拓扑图;
获取所述所有道路的交通流方向,根据所述交通流方向将所述路网的物理拓扑图构造为路网的逻辑拓扑图。
优选地,所述交通规制信息包括:两条道路之间的交规,或者线性交规。
本发明还提供一种基于海量电子地图的路网连通性的检测装置,所述检测装置包括:
构造模块,用于根据所述路网中的道路的交通流方向,将所述路网构造为路网的逻辑拓扑图;
设置模块,用于在所述路网的逻辑拓扑图中任意选取一条道路设置为起始道路;
读取模块,用于按照所述路网中起始道路的交通流方向,在所述路网的逻辑拓扑图中读取出相互连接的道路;
检测模块,用于检测被读取出地道路是否预先设置有交通规制信息;若没有,则按照所述交通流方向继续读取所述路网的逻辑拓扑图中的其他道路,直到按照所述交通流方向返回到所述起始道路。
优选地,所述构造模块包括:
第一构造单元,用于获取所述路网中所有道路的连接关系,根据所述连接关系构造出路网的物理拓扑图;
第二构造单元,用于获取所述所有道路的交通流方向,根据所述交通流方向将所述路网的物理拓扑图构造为路网的逻辑拓扑图。
优选地,所述交通规制信息包括:两条道路之间的交规,或者线性交规。
上述技术方案中的至少一个技术方案具有如下有益效果:通过只利用一次深度优先遍历即可找出有向图中的强连通分量,可在不需要人工干预的情况下,自行分析了路网中的禁止策略,高效的处理了海量路网信息连通性的检测。
【附图说明】
图1为本发明实施例中基于海量电子地图的路网连通性的检测方法流程图;
图2为本发明实施例中路网的逻辑拓扑图;
图3为本发明实施例中基于海量电子地图的路网连通性的检测装置框图。
【具体实施方式】
为了使本发明实施例的目的、技术方案和优点更加清楚明白,下面结合实施例和附图,对本发明实施例做进一步详细地说明。在此,本发明的示意性实施例及说明用于解释本发明,但并不作为对本发明的限定。
如图1所示,为本发明实施例中基于电子地图的路网连通性的检测方法流程图,包括如下步骤:
步骤101、获取路网中所有道路的连接关系,根据该连接关系构造出路网的物理拓扑图;
在本实施例中,路网的物理拓扑图可理解为:根据网路中道路的实际路况,构建出来的无向图。也就是从电子地图数据库中提取出没有标注交通流方向的道路,然后根据该道路的实际连接情况,构造出路网的物理拓扑图。
步骤102、获取所有道路的交通流方向,根据交通流方向将路网的物理拓扑图构造为路网的逻辑拓扑图;
在本实施例中,路网的逻辑拓扑图可理解为:在路网的物理拓扑图上标注出交通流方向,从而构建带有方向的路网的逻辑拓扑图。
步骤103、在路网的逻辑拓扑图中任意选取一条道路设置为起始道路;
步骤104、按照路网中的起始道路的交通流方向,在路网的逻辑拓扑图中读取出相互连接的道路;
步骤105、检测被读取出的道路是否预先设置有交通规制信息,若有,则执行步骤106;否则执行步骤107;
上述交通规制信息不仅包括两条线之间的交规(例如线A不能到线B),而且还包括了线性交规(例如线A经过线B和线C,不能到达线D),所以本实施例可针对各种不同的数据源进行路网连通性检查。在本步骤中也就是检测能否从起始道路按照交通流的方向到达逻辑拓扑图中任何一个道路。
步骤106、按照交通流的方向逆向退回到与该条道路连接的其他道路上,然后执行步骤107;
由于读取出的道路设置有交通管制信息,因此可按照交通流的方向逆向退回到之前读取出的其他道路上,然后在按照交通流方向和连接关系,读取出其他的道路。
步骤107、按照交通流方向继续读取路网的逻辑拓扑图中的其他道路,然后返回到步骤105,直到按照交通流方向返回到起始道路。
也就是可通过判断读取的道路是否为起始道路,若是则说明按照交通流方向能够从返回到起始道路,也就是获得了该有向图的一个强连通分量。
在本实施例中,可重复执行步骤103~步骤107,直到遍历路网中所有的道路,此时用户就可获得该路网中的所有强连通分量。通过只利用一次深度优先遍历即可找出有向图中的强连通分量,可在不需要人工干预的情况下,高效的处理了海量路网信息连通性的检测。
为了便于理解本发明实施例的方法流程,下面通过一具体的实施例来详细说明。假设一电子地图的路网包括:Line1、Line2、Line3、Line4、Line5、Line6、Line7、Line8和Line9共九条道路,并且根据该每条道路的交通流方向构建出该路网的逻辑拓扑图。参见图2,为本发明实施例中的路网的逻辑拓扑图,图中的箭头表示该道路的交通流方向。
基于图2中道路是否邻接和该道路的交通流方向建立一道路的邻接表,该邻接表用于记录道路之间的连通关系。参见表1为本实施例中建立的邻接表结构图。
表1
Line1→Line2 Line1→Line6 Line1→Line9 Line2→Line1 Line2→Line3 Line3→Line4
Line1→Line2 Line1→Line6 Line1→Line9 Line4→Line5 Line5→Line6 Line5→Line9 Line9→Line2 Line6→Line7 Line7→Line8 Line8→Line1 Line8→Line3 Line9→Line8
以表1中记载的Line1→Line2为例,意思为可按照Line1的交通流方向,从Line1到Line2上,两者之间是连通的,且Line2可称为Line1的退出线。表1中记载的其他的情况与上述Line1→Line2的含义类似,在此不再敷述。
在检测路网的连通性时,由于还需要考虑各种交通规制信息。因此,在本实施例中还设置有一交通规制表,用于记录该路网中的交通规制信息,该交通规制信息包括两条线之间的交规(例如LineA不能到LineB上),或者还包括线性交规(例如LineA经过LineB和LineC,不能到达LineD)。
在本实施例中该交通规制信息记录的方式为:Line8←Line7←Line6,表示从Line6能够到Line7,但是不能到Line8。该记录的方式是将线性交通规制逆序记录,以退出的Line8为Key值。当判断Line8入栈时,则继续判断匹配,当能够与该交通规制信息匹配时,则将Line8退出栈,读入其他的Line。当然还可设置其他交通规制信息。
在本实施例中需要设置用于记录路网的逻辑拓扑图中道路的相关信息的数据表,从而使得设计人员通过一次DFS遍历就能探索出路网中的强连通分量,该表的结构可参见表2。
表2
其中,Stack,表示算法部分进行DFS遍历的栈空间;
Used表示:算法部分用来记载目标Line在栈中的遍历状态符。当该Line已被遍历过时,可将Used标记为True,而当该Line未被遍历过时,可将Used标记为False;
Live表示:算法部分用来记载目标Line在栈中的生命周期状态符。当Line在栈中时,可将Live标记为True,当Line出栈后,可将该Line标记为Fasle;
Level表示:算法部分用来记载目标Line深度遍历的时间戳,例如可将第一个入栈Line的Level标记为0,然后其他Line的Level进行累加
Pos(Position)表示:算法部分用来记载目标Line在栈中的位置,例如在本实施例中可用0~9或者其他数字来表示该位置。
结合逻辑拓扑图(图2)、数据表(表2)和预先设置的交通规制信息来介绍本发明的路网连通性的检测方法,具体步骤如下:
首先,将表2中所有Line的遍历状态符(Used)和生命周期状态符(Live)的初始值标记为False,参见表3;
表3
也就是可在图2中任意选取一条道路设置为起始道路,例如选取Line1为起始道路,并将该Line1的是否参与遍历的状态符标记为True,从而在下次选取起始道路时就不会再考虑Line1了。在本实施例中,路网的逻辑拓扑图中所有的道路的是否参与遍历的状态符标记为False。True表示该条道路已被遍历过,而False表示该条道路还没有被遍历,一般将False标记为是否参与遍历的状态符的初始值。
下面仅介绍选取Line1为起始道路的来检测该路网的连通性的情形,其他类似的情形在此不再敷述。以图2中的Line1首先入栈为例进行说明;
1)Line1入栈;
2)Line1的退出线Line2入栈
3)Line2退出线Line1,Live=True,更新Level
4)继续Line2的退出线Line3入栈
5)Line3的退出线Line4入栈
6)Line4的退出线Line5入栈
7)Line5的退出线Line6入栈
8)Line6的退出线Line7入栈
9)Line7的退出线Line8入栈,在交通规制信息中发现Line8的限制信息,栈中逆向匹配成功,结束Line8的遍历,继续Line7的遍历,Line7已无退出线,退栈;开始Line6的遍历,Line6已无退出线,退栈;开始Line5的遍历,Line5还有Line9和Line2可以遍历(可通过表1判断出):
10)开始Line5的退出线Line9遍历,Line9入栈
11)Line9的退出线Line8遍历,发现Line8的交通规制信息,开始逆向匹配,匹配失败,Line8入栈
12)Line8的退出线Line1遍历,Live=True,更新level
后续遍历依次继续发现所有都将遍历完毕,本次DFS结束,开始导出结果为Graph(Line1、Line2、Line3、Line4、Line5、Line8、Line9)为一个强连通分量。
为了实现上述的方法实施例,本发明的其他实施例还提供了一种基于海量电子地图的路网连通性的检测装置。另需首先说明的是,由于下述的实施例是为实现前述的方法实施例,故该装置都是为了实现前述方法的各步骤而设,但本发明并不限于下述的实施例,任何可实现上述方法装置都应包含于本发明的保护范围。并且在下面的描述中,与前述方法相同的内容在此省略,以节约篇幅。
参见图3,为本发明实施例中基于海量电子地图的路网连通性的检测装置,由图中可知,检测装置30包括:
构造模块31,用于根据所述路网中的道路的交通流方向,将所述路网构造为路网的逻辑拓扑图;
设置模块32,用于在所述路网的逻辑拓扑图中任意选取一条道路设置为起始道路;
读取模块33,用于按照所述路网中起始道路的交通流方向,在所述路网的逻辑拓扑图中读取出相互连接的道路;
检测模块34,用于检测被读取出的道路是否预先设置有交通规制信息;若没有,则按照所述交通流方向继续读取所述路网的逻辑拓扑图中的其他道路,直到按照所述交通流方向返回到所述起始道路。
在本发明的另一实施例中,构造模块31包括:
第一构造单元,用于获取所述路网中所有道路的连接关系,根据所述连接关系构造出路网的物理拓扑图;
第二构造单元,用于获取所述所有道路的交通流方向,根据所述交通流方向将所述路网的物理拓扑图构造为路网的逻辑拓扑图。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以作出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。