專利名稱:基于城市路網(wǎng)結(jié)構(gòu)的任意建筑物間最優(yōu)路徑選擇方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種可應(yīng)用于城市交通最優(yōu)路徑查詢、城市物流等,基于城市路網(wǎng)結(jié)構(gòu)的任意兩點(diǎn)間最優(yōu)路徑選擇方法。
背景技術(shù):
目前國內(nèi)外對(duì)于基于地理信息系統(tǒng)的路網(wǎng)結(jié)點(diǎn)間最優(yōu)路徑算法均使用了開放、成熟的技術(shù),主要體現(xiàn)為①建立城市路網(wǎng)拓?fù)浣Y(jié)構(gòu);②選擇最優(yōu)路徑算法直接運(yùn)算結(jié)點(diǎn)間的最優(yōu)路徑,以距離為參數(shù)進(jìn)行的運(yùn)算稱為最短路徑,結(jié)合路況阻力模型進(jìn)行的運(yùn)算則稱為最優(yōu)路徑,無論是哪種名稱,其核心算法是基于有向圖結(jié)構(gòu)的最短路徑算法。
此外,對(duì)于城市建筑物的空間定位已經(jīng)可以通過地理信息系統(tǒng)軟件非常方便的實(shí)現(xiàn),但對(duì)于任意建筑物之間任意兩點(diǎn)的算法尚未考慮。
下文將對(duì)這些背景技術(shù)進(jìn)行分類描述2.1 Dijkstra(迪杰斯特拉)算法最短路徑問題可分為單源最短路徑問題及全源最短路徑問題兩種。其中單源最短路徑問題更具普遍意義,并能為全源最短路徑提供良好的借鑒方案。單源最短路徑問題的算法有很多種,從早期的基于限制條件的深度優(yōu)先搜索算法、基于有向無環(huán)圖的動(dòng)態(tài)規(guī)劃法、基于鄰接矩陣的Dijkstra算法、到最大相關(guān)邊法、最大相關(guān)點(diǎn)法、基于鄰接表的Dijkstra算法、A*算法、基于超圖數(shù)據(jù)結(jié)構(gòu)的深度優(yōu)先橢圓搜索算法等。其中,采用貪心及啟發(fā)策略的Dijkstra算法是目前已知理論中最完善的算法,它以極強(qiáng)的抗差性而得到廣泛的普及和應(yīng)用。
最短路徑問題的約束條件描述為給定起始點(diǎn)(Strat)和目標(biāo)結(jié)點(diǎn)(Goal),以及該路徑的必經(jīng)結(jié)點(diǎn)序列l(wèi)=(l1,l2,l3,…,ln)和避開結(jié)點(diǎn)序列O=(O1,O2,O3,…,Om)。
這里假設(shè)必經(jīng)結(jié)點(diǎn)序列是順序給出的,表示該路徑的第i個(gè)必經(jīng)結(jié)點(diǎn)是Ii(l≤i≤n);而避開結(jié)點(diǎn)序列中的結(jié)點(diǎn)沒有順序規(guī)定。
產(chǎn)生的最短路徑是由若干個(gè)結(jié)點(diǎn)組成的序列,即P={P1,P2,P3,…,Pk}其中P1=Start,Pk=GoalIi=Pki(l≤i≤n),Oi∈/P(l≤i≤m)那么P是一條滿足上述條件的最短路徑。
1959年Dijkstra提出了一個(gè)在給定圖中尋找最短路徑的算法,其基本思想是在已知圖(或網(wǎng))中最接近起始點(diǎn)P1的m個(gè)結(jié)點(diǎn)及從結(jié)點(diǎn)P1到這些結(jié)點(diǎn)中每個(gè)結(jié)點(diǎn)的最短路徑(從P1到其本身的最短路徑長度為零);對(duì)結(jié)點(diǎn)P1和這m個(gè)結(jié)點(diǎn)著色;然后,最接受于P1的第m+1個(gè)結(jié)點(diǎn)可按如下方法求得對(duì)于每一個(gè)未著色的結(jié)點(diǎn)y,考慮所有已著色結(jié)點(diǎn)x,把邊(x,y)接在從P1到x的最短路徑后面,這樣就得到從P1到y(tǒng)的m條不同路徑;從這m條路徑中選中最短的路徑,它就是P1到y(tǒng)的最短路徑;因?yàn)樗械倪呴L均非負(fù)值,所以從P1到最接近于P1的第m+1個(gè)結(jié)點(diǎn)的最短路徑必然只使用已著色的頂點(diǎn)作為中間結(jié)點(diǎn)。
從m=0開始,將這個(gè)過程重復(fù)下去,直至求得從P1到Pk的最短路徑為止。
基于鄰接矩陣的傳統(tǒng)Dijkstra算法,核心部分偽碼描述如下D[v0]=0;final[v0]=TRUE;//D為節(jié)點(diǎn)的累計(jì)阻抗值①for(i=1;i<n;i++){//主循環(huán),每次求出v0到某個(gè)結(jié)點(diǎn)v的最短路徑,并將加入集合S中min=INFINITY;② for(w=0;w<n;w++){if(!final[w])//結(jié)點(diǎn)w在集合V-S中if(D[w]<min){//結(jié)點(diǎn)w距v0更近v=w;min=D[w];}}
final[v]=TRUE;//將距離最近的結(jié)點(diǎn)v加入集合S中③ for(w=0;w<n;w++){//更新當(dāng)前最短路徑及距離if(!final[w]&&(min+c[v][w]<D[w]))//修改D[w],w∈V-SD[w]=min+c[v][w];}}若改用鄰接表存儲(chǔ)網(wǎng)絡(luò)數(shù)據(jù),則Dijkstra算法的子循環(huán)③可改為③for(w=0;w<v-adj-num;w++){//v-adj-num及v-adj[w]分別為v的鄰接結(jié)點(diǎn)總數(shù)及編號(hào)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]];}算法規(guī)?;蚩捎洖閒(x)=n2+n2,也即時(shí)間復(fù)雜度為O(n2)。
2.2城市路網(wǎng)拓?fù)浣Y(jié)構(gòu)的建立在地理信息系統(tǒng)中,我們可以用線來表示城市道路,并可以通過ArcGIS軟件對(duì)城市道路建立拓?fù)洌幢砻骶€與線之間的關(guān)系是否相交或不相交、單向或雙向,并獲得道路交點(diǎn)的單獨(dú)圖層,這樣就構(gòu)成了網(wǎng)絡(luò)圖論理論中的網(wǎng)絡(luò)圖。再將拓?fù)浞侄魏蟮牡缆穲D標(biāo)明左右門牌號(hào)碼,形成了完整的城市路網(wǎng)拓?fù)浣Y(jié)構(gòu)。其處理過程如下·對(duì)原始的道路圖進(jìn)行線元素的拓?fù)錂z查,生成線與線相互交叉的道路圖;·對(duì)道路圖創(chuàng)建拓?fù)潢P(guān)系文件,并定義起始結(jié)點(diǎn),終止結(jié)點(diǎn),道路名稱,左右門牌號(hào)碼,道路長度,路面寬度、等級(jí)等屬性數(shù)據(jù);其中起始結(jié)點(diǎn)、終止結(jié)點(diǎn)、道路長度可通過ArcGIS軟件自動(dòng)生成,道路名稱、路面寬度、等級(jí)可從原始道路圖屬性表中繼承,左右門牌號(hào)碼則必須通過人工方式校正;·生成道路交叉點(diǎn)即網(wǎng)絡(luò)結(jié)點(diǎn)文件,其屬性數(shù)據(jù)為ID號(hào),X、Y坐標(biāo)值,交叉路段的名稱等,均可通過ArcGIS軟件自動(dòng)生成;·將結(jié)點(diǎn)文件導(dǎo)入數(shù)據(jù)庫或單獨(dú)寫表。
2.3基于門牌號(hào)碼的城市地點(diǎn)定位城市中任一建筑物均有其門牌號(hào)碼,也就意味著建筑物本身可以通過門牌號(hào)碼在城市路網(wǎng)結(jié)構(gòu)中實(shí)現(xiàn)空間定位,這一過程在地理信息系統(tǒng)中稱為地理編碼(GeoCoding),它的前提是必須建立城市路網(wǎng)拓?fù)浣Y(jié)構(gòu)。
這一定位過程可通過任一地理信息系統(tǒng)軟件中的地理編碼功能實(shí)現(xiàn)。
發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種基于城市路網(wǎng)結(jié)構(gòu)的任意建筑物間最優(yōu)路徑選擇方法,從而實(shí)現(xiàn)網(wǎng)絡(luò)中任意兩點(diǎn)間的最優(yōu)路徑查詢。
本發(fā)明所提供的一種基于城市路網(wǎng)結(jié)構(gòu)的任意建筑物間最優(yōu)路徑選擇方法,包括下列步驟一)根據(jù)已有的路網(wǎng)空間信息庫和建筑物空間信息庫,建立城市路網(wǎng)拓?fù)浣Y(jié)構(gòu);二)從該城市路網(wǎng)拓?fù)浣Y(jié)構(gòu)中抽取道路交叉口即結(jié)點(diǎn)信息,建立結(jié)點(diǎn)空間信息庫中間件;同時(shí),對(duì)城市建筑物按中心點(diǎn)與門牌號(hào)碼進(jìn)行地理編碼,實(shí)現(xiàn)空間定位;三)調(diào)用結(jié)點(diǎn)空間信息庫中間件,一方面疊加所述路網(wǎng)空間信息庫,選用Dijkstra算法進(jìn)行運(yùn)算,求出任意兩結(jié)點(diǎn)間最短路徑,生成城市交叉路口,即結(jié)點(diǎn)間最優(yōu)路徑解海量數(shù)據(jù)庫中間件;另一方面,在所述建筑物空間信息庫中增加其最近的兩個(gè)交叉路口,即該建筑物所在路段起始、終止結(jié)點(diǎn)的記錄字段,生成城市建筑物基礎(chǔ)空間信息庫;四)對(duì)任意兩建筑物,首先查詢所述城市建筑物基礎(chǔ)空間信息庫,得到起始建筑物點(diǎn)位S的路段起始結(jié)點(diǎn)Ss、終止結(jié)點(diǎn)St;終止建筑物點(diǎn)位T的路段起始結(jié)點(diǎn)Ts、終止結(jié)點(diǎn)Tt;五)查詢所述最優(yōu)路徑解海量數(shù)據(jù)庫中間件V,得到V[Ss,Ts],V[Ss,Tt],V[St,Ts],V[St,Tt];六)對(duì)V[Ss,Ts],V[Ss,Tt],V[St,Ts],V[St,Tt]進(jìn)行排序,求取最小值,即S至T的最短路徑。
采用上述的技術(shù)方案,利用數(shù)據(jù)庫中間件,即將傳統(tǒng)的最短路徑運(yùn)算結(jié)果通過構(gòu)造帶間隔符的數(shù)據(jù)鏈表形式保存到數(shù)據(jù)庫中,形成城市路網(wǎng)中任意兩個(gè)結(jié)點(diǎn)間的最(優(yōu))短路徑數(shù)據(jù)庫,再結(jié)合城市建筑物的定位技術(shù)與城市路網(wǎng)拓?fù)浣Y(jié)構(gòu)相結(jié)合,查找起始建筑物至終止建筑物間最(優(yōu))短路徑。本發(fā)明將傳統(tǒng)的最優(yōu)路徑查詢計(jì)算過程通過數(shù)據(jù)庫中間件技術(shù)轉(zhuǎn)化為查詢過程,并利用地理信息系統(tǒng)的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),實(shí)現(xiàn)網(wǎng)絡(luò)中任意兩點(diǎn)間的最優(yōu)路徑查詢。
圖1為本發(fā)明中城市路網(wǎng)及建筑物信息預(yù)處理流程示意圖;圖2為本發(fā)明中查詢與計(jì)算任意兩建筑物間最優(yōu)路徑流程。
具體實(shí)施例方式
本發(fā)明的基本思想為①建立城市路網(wǎng)拓?fù)浣Y(jié)構(gòu);②建立道路交叉點(diǎn)即結(jié)點(diǎn)圖層;③選用Dijkstra算法進(jìn)行運(yùn)算,求出所有結(jié)點(diǎn)對(duì)最短(優(yōu))路徑,寫入數(shù)據(jù)庫V;④對(duì)城市建筑物按門牌號(hào)碼進(jìn)行地理編碼,實(shí)現(xiàn)空間定位;⑤根據(jù)起始建筑物點(diǎn)位S所在路段1s名稱,查找該建筑物的路段起始結(jié)點(diǎn)Ss、終止結(jié)點(diǎn)St;⑥根據(jù)到達(dá)建筑物點(diǎn)位T所在路段1t名稱,查找該建筑物的路段起始結(jié)點(diǎn)Ts、終止結(jié)點(diǎn)Tt;⑦通過查詢后的4個(gè)值的排序計(jì)算,求出S至T的最短路徑WW[S,T]=min{V[Ss,Ts],V[Ss,Tt],V[St,Ts],V[St,Tt]}其具體實(shí)現(xiàn)過程分以下兩步,如圖1、圖2所示。
如圖1所示,城市路網(wǎng)及建筑物信息預(yù)處理流程根據(jù)已有的路網(wǎng)空間信息庫和建筑物空間信息庫,通過ArcGIS軟件建立城市路網(wǎng)拓?fù)浣Y(jié)構(gòu);從該城市路網(wǎng)拓?fù)浣Y(jié)構(gòu)中抽取道路交叉口即結(jié)點(diǎn)信息,建立結(jié)點(diǎn)空間信息庫中間件;同時(shí),對(duì)城市建筑物按中心點(diǎn)與門牌號(hào)碼進(jìn)行地理編碼,實(shí)現(xiàn)空間定位;調(diào)用結(jié)點(diǎn)空間信息庫中間件,一方面疊加所述路網(wǎng)空間信息庫,選用Dijkstra算法進(jìn)行運(yùn)算,求出任意兩結(jié)點(diǎn)間最短路徑,生成城市交叉路口,即結(jié)點(diǎn)間最優(yōu)路徑解海量數(shù)據(jù)庫中間件,使傳統(tǒng)的最短路徑運(yùn)算結(jié)果通過構(gòu)造帶間隔符的數(shù)據(jù)鏈表形式保存到數(shù)據(jù)庫中;另一方面,通過空間緩沖區(qū)的遞增算法,在所述建筑物空間信息庫中增加其最近的兩個(gè)交叉路口,即該建筑物所在路段起始、終止結(jié)點(diǎn)的記錄字段,生成城市建筑物基礎(chǔ)空間信息庫。
如圖2所示,查詢與計(jì)算任意兩建筑物間最優(yōu)路徑流程對(duì)任意兩建筑物,首先查詢所述城市建筑物基礎(chǔ)空間信息庫,得到起始建筑物點(diǎn)位S的路段起始結(jié)點(diǎn)Ss、終止結(jié)點(diǎn)St;終止建筑物點(diǎn)位T的路段起始結(jié)點(diǎn)Ts、終止結(jié)點(diǎn)Tt;查詢所述最優(yōu)路徑解海量數(shù)據(jù)庫中間件V,得到V[Ss,Ts],V[Ss,Tt],V[St,Ts],V[St,Tt];對(duì)V[Ss,Ts],V[Ss,Tt],V[St,Ts],V[St,Tt]進(jìn)行排序,求取最小值,即S至T的最短路徑。
在上述中,核心是構(gòu)造最優(yōu)路徑解海量數(shù)據(jù)庫中間件的鏈表結(jié)構(gòu),考慮到一旦寫入數(shù)據(jù)庫,其中的記錄總數(shù)為結(jié)點(diǎn)數(shù)n×(n-1),為盡可能節(jié)約數(shù)據(jù)庫中每條記錄的存儲(chǔ)空間,以減少查詢時(shí)間,我們?cè)诔鞘新肪W(wǎng)拓?fù)浣Y(jié)構(gòu)的屬性表中建立了道路ID,數(shù)據(jù)庫中的鏈表存儲(chǔ)結(jié)構(gòu)為{l1,l2,……,ln}為一獨(dú)立字段,在計(jì)算程序中加入編碼函數(shù),在查詢程序中加入解碼函數(shù)來實(shí)現(xiàn)。
以O(shè)racle數(shù)據(jù)庫為例,我們定義結(jié)點(diǎn)對(duì)最(優(yōu))短路徑表結(jié)構(gòu)如下ID NUMBER 10F_NODE NUMBER 4 //道路起始點(diǎn)T_NODE NUMBER 4 //道路終止點(diǎn)LENGTH NUMBER 10 2 //最短路徑總長ROUTE_IDVARCHAR 1000 //每段道路的ID號(hào)以通過ADO方式寫數(shù)據(jù)庫表為例,VB偽碼如下for i=l To MaxNodeNum{for j=l To MaxNodeNum{rst.AddNew;if FindPath{//如果存在最短路徑Set BestRoute=Nothing;Call ExecutePathSearch(NodeReturnID);//調(diào)用Dijkstra算法routesId=BestRoute.Fields(″Id″).Value;//得到最短路徑信息While(!BestRoute.EOF)If InStr(routesName,Trim(BestRoute.Fields(″Id″).Value))=0routesId=routesId+″,″+Trim(BestRoute.Fields(″Id″).Value);BestRoute.MoveNext;
Wend;BestRoute.MoveFirst;rst!route_id=routesId;//寫入數(shù)據(jù)庫}Else{rst!route_id=″兩點(diǎn)間的道路未連通!″rst!route_name=″兩點(diǎn)間的道路未連通!″}rst.Update}}我們得到如下表結(jié)構(gòu)的數(shù)據(jù)庫中間件 當(dāng)前,影響最優(yōu)路徑算法在交通與物流中應(yīng)用的重要因互是算法的復(fù)雜度,也就是算法在機(jī)器上運(yùn)行的時(shí)間。有很多人將精力放在對(duì)Dijkstra算法本身的改進(jìn)上,提出了四叉數(shù)堆優(yōu)先隊(duì)列、逆鄰接表等一系列提高運(yùn)算速度與效率的方法。但本發(fā)明中提出的算法并沒有真正去實(shí)現(xiàn)Dijkstra算法效率的提高,而是通過數(shù)據(jù)庫中間件,將復(fù)雜的計(jì)算過程放在后臺(tái)執(zhí)行,將傳統(tǒng)意義上的路徑最優(yōu)計(jì)算機(jī)問題轉(zhuǎn)化為數(shù)據(jù)庫中間件的生成與查詢。
我們知道城市路網(wǎng)也是動(dòng)態(tài)變化的,盡管變化周期不是實(shí)時(shí)更新,也存在著更新周期,以往的算法意味著每次路網(wǎng)更新,用戶都將面臨一段時(shí)間的等待周期。而本算法的最大優(yōu)點(diǎn)就是將更新過程與使用過程分離,基本思想中的每一步均可由不同的計(jì)算機(jī)來完成,相對(duì)于大型數(shù)據(jù)庫而言,數(shù)據(jù)更新的同時(shí)仍可提供并發(fā)查詢服務(wù),這使本算法有著極強(qiáng)的生命力和應(yīng)用面。
權(quán)利要求
1.一種基于城市路網(wǎng)結(jié)構(gòu)的任意建筑物間最優(yōu)路徑選擇方法,包括下列步驟一)根據(jù)已有的路網(wǎng)空間信息庫和建筑物空間信息庫,建立城市路網(wǎng)拓?fù)浣Y(jié)構(gòu);二)從該城市路網(wǎng)拓?fù)浣Y(jié)構(gòu)中抽取道路交叉口即結(jié)點(diǎn)信息,建立結(jié)點(diǎn)空間信息庫中間件;同時(shí),對(duì)城市建筑物按中心點(diǎn)與門牌號(hào)碼進(jìn)行地理編碼,實(shí)現(xiàn)空間定位;三)調(diào)用結(jié)點(diǎn)空間信息庫中間件,一方面疊加所述路網(wǎng)空間信息庫,選用Dijkstra算法進(jìn)行運(yùn)算,求出任意兩結(jié)點(diǎn)間最短路徑,生成城市交叉路口,即結(jié)點(diǎn)間最優(yōu)路徑解海量數(shù)據(jù)庫中間件;另一方面,在所述建筑物空間信息庫中增加其最近的兩個(gè)交叉路口,即該建筑物所在路段起始、終止結(jié)點(diǎn)的記錄字段,生成城市建筑物基礎(chǔ)空間信息庫;四)對(duì)任意兩建筑物,首先查詢所述城市建筑物基礎(chǔ)空間信息庫,得到起始建筑物點(diǎn)位S的路段起始結(jié)點(diǎn)Ss、終止結(jié)點(diǎn)St;終止建筑物點(diǎn)位T的路段起始結(jié)點(diǎn)Ts、終止結(jié)點(diǎn)Tt;五)查詢所述最優(yōu)路徑解海量數(shù)據(jù)庫中間件V,得到V[Ss,Ts],V[Ss,Tt],V[St,Ts],V[St,Tt];六)對(duì)V[Ss,Ts],V[Ss,Tt],V[St,Ts],V[St,Tt]進(jìn)行排序,求取最小值,即S至T的最短路徑。
全文摘要
一種基于城市路網(wǎng)結(jié)構(gòu)的任意建筑物間最優(yōu)路徑選擇方法;建立城市路網(wǎng)拓?fù)浣Y(jié)構(gòu);建立道路交叉點(diǎn)即結(jié)點(diǎn)圖層;選用Dijkstra(迪杰斯特拉)算法進(jìn)行運(yùn)算,求出所有結(jié)點(diǎn)對(duì)最短(優(yōu))路徑,寫入數(shù)據(jù)庫V;對(duì)城市建筑物按門牌號(hào)碼進(jìn)行地理編碼,實(shí)現(xiàn)空間定位;根據(jù)起始建筑物點(diǎn)位S所在路段1s名稱,查找該建筑物的路段起始結(jié)點(diǎn)Ss、終止結(jié)點(diǎn)St;根據(jù)到達(dá)建筑物點(diǎn)位T所在路段1t名稱,查找該建筑物的路段起始結(jié)點(diǎn)Ts、終止結(jié)點(diǎn)Tt;通過查詢后的4個(gè)值的排序計(jì)算,求出S至T的最短路徑W,W[S,T]=min{V[Ss,Ts],V[Ss,Tt],V[St,Ts],V[St,Tt]}。本發(fā)明將傳統(tǒng)的最優(yōu)路徑查詢計(jì)算過程通過數(shù)據(jù)庫中間件技術(shù)轉(zhuǎn)化為查詢過程,并利用地理信息系統(tǒng)的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),實(shí)現(xiàn)網(wǎng)絡(luò)中任意兩點(diǎn)間的最優(yōu)路徑查詢。
文檔編號(hào)G06F17/30GK1684074SQ20041001766
公開日2005年10月19日 申請(qǐng)日期2004年4月14日 優(yōu)先權(quán)日2004年4月14日
發(fā)明者張超, 葉雷 申請(qǐng)人:上海暉洋信息技術(shù)有限公司