导航路网数据分层的基本原理

时间:2021-10-10 17:06:32

导航路网数据分层的基本原理

导航的道路网络,由结点、弧段构成。

对于每个道路弧段,都有一个行政等级,或者是高速、国道、省道、县道、市镇道等。

单单把全国的高速挑出来,可以看到,由高速组成的道路网络,不一定是拓扑联通的。即,不能保证,任意两个道路弧段,都可以彼此通达。

 

在进行大区域路径规划的时候,例如,在全中国的范围内,从北京*,到上海的东方明珠,进行路径规划,无论是采用Dijkstra也好,A*也好,,都会计算很久很久。为什么呢?进行路径规划时,高速、国道、省道、县道、市镇道等等,任何小屁路,都会去探索一下,去检查一下,需要搜索的空间太巨大了。

 

    设想小明同学,需要从北京*,到上海的东方明珠去,他会怎么走呢?通常而言,小明同学,会从*出发,通过最快的方式,走上北京到上海的高速,中间经过天津,河北,山东,江苏,到达上海之后,从高速下来,然后通往东方明珠。

一旦小明同学上了高速以后,会走上天津的某条小屁路么?会去考虑河北的某条乡村路么?会知道山东某条省道也可以通往上海么?很显然,不会,一旦上了高速,高速以外的任何道路,都不会考虑了。当然,如果小明想去某个声色场所消费一下,那要另外考虑了。。。

 

从小明的这个场景中,可以对道路网络进行一个抽象,将道路网络,分层处理:

所有的高速,组合在一起,任意两个弧段之间能联通;设定此集合为A;

高速+国道,组合在一起,任意两个弧段之间能联通;设定此集合为B;

高速、国道、省道,组合在一起,任意两个弧段之间能联通;设定此集合为C;

高速、国道、省道、县道,组合在一起,任意两个弧段之间能联通;设定此集合为D;

高速、国道、省道、县道、市镇道,组合在一起,任意两个弧段之间能联通;设定此集合为E;

 

可以看得出来,A是B的子集,B是C的子集,C是D的子集,D是E的子集。

小明一旦上了高速以后,仅仅在A这个集合中,进行路径计算的搜索即可,找到A集合中,属于上海的高速出口。但实际在导航仪中,采用的是双向启发式的路径规划算法,小明在E的集合中,分别从起点,终点路径规划,找到同时属于A和E的结点(弧段),然后以此为起点和终点,在A集合中,进行路径规划。

 

现在,导航路网的分层的数学场景,已经推导出来了。

在E这个集合的背景下,如何自动化的计算得到A\B\C\D;其中,E中的每个弧段,都有一个道路等级信息,即是属于高速、国道、省道、县道、市镇道中的某一个。

 导航路网数据分层的基本原理

如上图所示,整个道路网络,由高速,国道,省道构成,如何将之分成三层呢?

第一层:将所有的高速选出来,经过考察,发现任何两个高速弧段是彼此联通的;此高速,可以设定为一层。

 

    第二层:选出来高速和国道,经过考察,发现有一部分国道,与其他的路网是不联通的。考察不联通的哪些国道,计算其与距离其最近的高速之间的最短路径(仅仅考察省道),从这些最短路径中,选择出最优的一条,或者几条,设定在第二层(国道,和这些最短路径的省道,设定为第二层)。

 

   第三层:选出来高速和国道,省道,经过考察,发现任何两个高速弧段是彼此联通的;此些省道,可以设定为第三层。

 

以上,是道路网络分层的基本原理,具体的细节,还有待讨论。