基于城市路网结构的任意建筑物间最优路径选择方法 【技术领域】
本发明涉及一种可应用于城市交通最优路径查询、城市物流等,基于城市路网结构的任意两点间最优路径选择方法。
背景技术
目前国内外对于基于地理信息系统的路网结点间最优路径算法均使用了开放、成熟的技术,主要体现为:
①建立城市路网拓扑结构;
②选择最优路径算法直接运算结点间的最优路径,以距离为参数进行的运算称为最短路径,结合路况阻力模型进行的运算则称为最优路径,无论是哪种名称,其核心算法是基于有向图结构的最短路径算法。
此外,对于城市建筑物的空间定位已经可以通过地理信息系统软件非常方便的实现,但对于任意建筑物之间任意两点的算法尚未考虑。
下文将对这些背景技术进行分类描述:
2.1 Dijkstra(迪杰斯特拉)算法
最短路径问题可分为单源最短路径问题及全源最短路径问题两种。其中单源最短路径问题更具普遍意义,并能为全源最短路径提供良好的借鉴方案。单源最短路径问题的算法有很多种,从早期的基于限制条件的深度优先搜索算法、基于有向无环图的动态规划法、基于邻接矩阵地Dijkstra算法、到最大相关边法、最大相关点法、基于邻接表的Dijkstra算法、A*算法、基于超图数据结构的深度优先椭圆搜索算法等。其中,采用贪心及启发策略的Dijkstra算法是目前已知理论中最完善的算法,它以极强的抗差性而得到广泛的普及和应用。
最短路径问题的约束条件描述为:
给定起始点(Strat)和目标结点(Goal),以及该路径的必经结点序列l=(l1,l2,l3,…,ln)和避开结点序列O=(O1,O2,O3,…,Om)。
这里假设必经结点序列是顺序给出的,表示该路径的第i个必经结点是Ii(l≤i≤n);而避开结点序列中的结点没有顺序规定。
产生的最短路径是由若干个结点组成的序列,即:P={P1,P2,P3,…,Pk}
其中P1=Start,Pk=Goal
Ii=Pki(l≤i≤n),Oi∈/P(l≤i≤m)
那么P是一条满足上述条件的最短路径。
1959年Dijkstra提出了一个在给定图中寻找最短路径的算法,其基本思想是:在已知图(或网)中最接近起始点P1的m个结点及从结点P1到这些结点中每个结点的最短路径(从P1到其本身的最短路径长度为零);对结点P1和这m个结点着色;然后,最接受于P1的第m+1个结点可按如下方法求得:
对于每一个未着色的结点y,考虑所有已着色结点x,把边(x,y)接在从P1到x的最短路径后面,这样就得到从P1到y的m条不同路径;从这m条路径中选中最短的路径,它就是P1到y的最短路径;因为所有的边长均非负值,所以从P1到最接近于P1的第m+1个结点的最短路径必然只使用已着色的顶点作为中间结点。
从m=0开始,将这个过程重复下去,直至求得从P1到Pk的最短路径为止。
基于邻接矩阵的传统Dijkstra算法,核心部分伪码描述如下:
D[v0]=0;final[v0]=TRUE;//D为节点的累计阻抗值
①for(i=1;i<n;i++){//主循环,每次求出v0到某个结点v的最短路径,并将加入集合S中
min=INFINITY;
② for(w=0;w<n;w++){
if(!final[w])//结点w在集合V-S中
if(D[w]<min){//结点w距v0更近
v=w;min=D[w];
}
}
final[v]=TRUE;//将距离最近的结点v加入集合S中
③ for(w=0;w<n;w++){//更新当前最短路径及距离
if(!final[w]&&(min+c[v][w]<D[w]))//修改D[w],w∈V-S
D[w]=min+c[v][w];
}
}
若改用邻接表存储网络数据,则Dijkstra算法的子循环③可改为:
③for(w=0;w<v-adj-num;w++){//v-adj-num及v-adj[w]分别为v的邻接结点总数及编号
if(!final[v-adj[w]]&&(min+c[v][v-adj[w]]<D[v-adj[w]]))
D[v-adj[w]]=min+c[v][v-adj[w]];
}
算法规模或可记为f(x)=n2+n2,也即时间复杂度为O(n2)。
2.2城市路网拓扑结构的建立
在地理信息系统中,我们可以用线来表示城市道路,并可以通过ArcGIS软件对城市道路建立拓扑,即表明线与线之间的关系是否相交或不相交、单向或双向,并获得道路交点的单独图层,这样就构成了网络图论理论中的网络图。再将拓扑分段后的道路图标明左右门牌号码,形成了完整的城市路网拓扑结构。其处理过程如下:
·对原始的道路图进行线元素的拓扑检查,生成线与线相互交叉的道路图;
·对道路图创建拓扑关系文件,并定义起始结点,终止结点,道路名称,左右门牌号码,道路长度,路面宽度、等级等属性数据;其中起始结点、终止结点、道路长度可通过ArcGIS软件自动生成,道路名称、路面宽度、等级可从原始道路图属性表中继承,左右门牌号码则必须通过人工方式校正;
·生成道路交叉点即网络结点文件,其属性数据为ID号,X、Y坐标值,交叉路段的名称等,均可通过ArcGIS软件自动生成;
·将结点文件导入数据库或单独写表。
2.3基于门牌号码的城市地点定位
城市中任一建筑物均有其门牌号码,也就意味着建筑物本身可以通过门牌号码在城市路网结构中实现空间定位,这一过程在地理信息系统中称为地理编码(GeoCoding),它的前提是必须建立城市路网拓扑结构。
这一定位过程可通过任一地理信息系统软件中的地理编码功能实现。
【发明内容】
本发明的目的在于提供一种基于城市路网结构的任意建筑物间最优路径选择方法,从而实现网络中任意两点间的最优路径查询。
本发明所提供的一种基于城市路网结构的任意建筑物间最优路径选择方法,包括下列步骤:一)根据已有的路网空间信息库和建筑物空间信息库,建立城市路网拓扑结构;二)从该城市路网拓扑结构中抽取道路交叉口即结点信息,建立结点空间信息库中间件;同时,对城市建筑物按中心点与门牌号码进行地理编码,实现空间定位;三)调用结点空间信息库中间件,一方面叠加所述路网空间信息库,选用Dijkstra算法进行运算,求出任意两结点间最短路径,生成城市交叉路口,即结点间最优路径解海量数据库中间件;另一方面,在所述建筑物空间信息库中增加其最近的两个交叉路口,即该建筑物所在路段起始、终止结点的记录字段,生成城市建筑物基础空间信息库;四)对任意两建筑物,首先查询所述城市建筑物基础空间信息库,得到:起始建筑物点位S的路段起始结点Ss、终止结点St;终止建筑物点位T的路段起始结点Ts、终止结点Tt;五)查询所述最优路径解海量数据库中间件V,得到V[Ss,Ts],V[Ss,Tt],V[St,Ts],V[St,Tt];六)对V[Ss,Ts],V[Ss,Tt],V[St,Ts],V[St,Tt]进行排序,求取最小值,即S至T的最短路径。
采用上述的技术方案,利用数据库中间件,即将传统的最短路径运算结果通过构造带间隔符的数据链表形式保存到数据库中,形成城市路网中任意两个结点间的最(优)短路径数据库,再结合城市建筑物的定位技术与城市路网拓扑结构相结合,查找起始建筑物至终止建筑物间最(优)短路径。本发明将传统的最优路径查询计算过程通过数据库中间件技术转化为查询过程,并利用地理信息系统的网络拓扑结构,实现网络中任意两点间的最优路径查询。
【附图说明】
图1为本发明中城市路网及建筑物信息预处理流程示意图;
图2为本发明中查询与计算任意两建筑物间最优路径流程。
【具体实施方式】
本发明的基本思想为:
①建立城市路网拓扑结构;
②建立道路交叉点即结点图层;
③选用Dijkstra算法进行运算,求出所有结点对最短(优)路径,写入数据库V;
④对城市建筑物按门牌号码进行地理编码,实现空间定位;
⑤根据起始建筑物点位S所在路段1s名称,查找该建筑物的路段起始结点Ss、终止结点St;
⑥根据到达建筑物点位T所在路段1t名称,查找该建筑物的路段起始结点Ts、终止结点Tt;
⑦通过查询后的4个值的排序计算,求出S至T的最短路径W
W[S,T]=min{V[Ss,Ts],V[Ss,Tt],V[St,Ts],V[St,Tt]}
其具体实现过程分以下两步,如图1、图2所示。
如图1所示,城市路网及建筑物信息预处理流程:
根据已有的路网空间信息库和建筑物空间信息库,通过ArcGIS软件建立城市路网拓扑结构;
从该城市路网拓扑结构中抽取道路交叉口即结点信息,建立结点空间信息库中间件;同时,对城市建筑物按中心点与门牌号码进行地理编码,实现空间定位;
调用结点空间信息库中间件,一方面叠加所述路网空间信息库,选用Dijkstra算法进行运算,求出任意两结点间最短路径,生成城市交叉路口,即结点间最优路径解海量数据库中间件,使传统的最短路径运算结果通过构造带间隔符的数据链表形式保存到数据库中;另一方面,通过空间缓冲区的递增算法,在所述建筑物空间信息库中增加其最近的两个交叉路口,即该建筑物所在路段起始、终止结点的记录字段,生成城市建筑物基础空间信息库。
如图2所示,查询与计算任意两建筑物间最优路径流程:
对任意两建筑物,首先查询所述城市建筑物基础空间信息库,得到:起始建筑物点位S的路段起始结点Ss、终止结点St;终止建筑物点位T的路段起始结点Ts、终止结点Tt;
查询所述最优路径解海量数据库中间件V,得到V[Ss,Ts],V[Ss,Tt],V[St,Ts],V[St,Tt];
对V[Ss,Ts],V[Ss,Tt],V[St,Ts],V[St,Tt]进行排序,求取最小值,即S至T的最短路径。
在上述中,核心是构造最优路径解海量数据库中间件的链表结构,考虑到一旦写入数据库,其中的记录总数为结点数n×(n-1),为尽可能节约数据库中每条记录的存储空间,以减少查询时间,我们在城市路网拓扑结构的属性表中建立了道路ID,数据库中的链表存储结构为{l1,l2,……,ln}为一独立字段,在计算程序中加入编码函数,在查询程序中加入解码函数来实现。
以Oracle数据库为例,我们定义结点对最(优)短路径表结构如下:
ID NUMBER 10
F_NODE NUMBER 4 //道路起始点
T_NODE NUMBER 4 //道路终止点
LENGTH NUMBER 10 2 //最短路径总长
ROUTE_ID VARCHAR 1000 //每段道路的ID号
以通过ADO方式写数据库表为例,VB伪码如下: for i=l To MaxNodeNum{
for j=l To MaxNodeNum{
rst.AddNew;
if FindPath{//如果存在最短路径
Set BestRoute=Nothing;
Call ExecutePathSearch(NodeReturnID);//调用Dijkstra算法
routesId=BestRoute.Fields(″Id″).Value;//得到最短路径信息
While(!BestRoute.EOF)
If InStr(routesName,Trim(BestRoute.Fields(″Id″).Value))=0
routesId=routesId+″,″+Trim(BestRoute.Fields(″Id″).Value);
BestRoute.MoveNext;
Wend;
BestRoute.MoveFirst;
rst!route_id=routesId;//写入数据库
}
Else{
rst!route_id=″两点间的道路未连通!″
rst!route_name=″两点间的道路未连通!″
}
rst.Update
}
}
我们得到如下表结构的数据库中间件:
当前,影响最优路径算法在交通与物流中应用的重要因互是算法的复杂度,也就是算法在机器上运行的时间。有很多人将精力放在对Dijkstra算法本身的改进上,提出了四叉数堆优先队列、逆邻接表等一系列提高运算速度与效率的方法。但本发明中提出的算法并没有真正去实现Dijkstra算法效率的提高,而是通过数据库中间件,将复杂的计算过程放在后台执行,将传统意义上的路径最优计算机问题转化为数据库中间件的生成与查询。
我们知道城市路网也是动态变化的,尽管变化周期不是实时更新,也存在着更新周期,以往的算法意味着每次路网更新,用户都将面临一段时间的等待周期。而本算法的最大优点就是将更新过程与使用过程分离,基本思想中的每一步均可由不同的计算机来完成,相对于大型数据库而言,数据更新的同时仍可提供并发查询服务,这使本算法有着极强的生命力和应用面。