劉 鋰,段芃芃
(成都理工大學(xué) 工程技術(shù)學(xué)院,四川 樂山 614007)
現(xiàn)代城市的發(fā)展是離不開公交車,公交已成為現(xiàn)代城市的象征,是一種現(xiàn)有的城市文化,無論是生活還是工作,公共汽車已經(jīng)成為重要的城市交通工具。隨著社會(huì)經(jīng)濟(jì)的飛速發(fā)展,城市建設(shè)規(guī)模的加大,公交線路增多,因此對(duì)智慧公交查詢系統(tǒng)的需求也相應(yīng)加大。
城市是人類高度集中的活動(dòng)中心,隨著城市化建設(shè)加快,人們的出行也面臨著相應(yīng)的困難。加之科技的進(jìn)步和經(jīng)濟(jì)的快速發(fā)展,城市公共交通系統(tǒng)也越來越復(fù)雜,數(shù)據(jù)和信息也越來越多,服務(wù)要求越來越高,智慧公共系統(tǒng)[1-3]的管理面臨著新的挑戰(zhàn)。GIS技術(shù)主要用來管理和分析空間數(shù)據(jù),適用于智慧公交系統(tǒng)[4]的設(shè)計(jì)與開發(fā)。
GIS技術(shù)具有強(qiáng)大的可視化、查詢分析和網(wǎng)絡(luò)分析功能。將交通網(wǎng)絡(luò)信息、公交網(wǎng)絡(luò)信息和地理空間信息有機(jī)聯(lián)系起來,進(jìn)行相關(guān)數(shù)據(jù)的處理和查詢分析,能提供較好的實(shí)現(xiàn)方法。
文中依托GIS的空間構(gòu)造[5]能力和網(wǎng)絡(luò)分析特性,設(shè)計(jì)了城市公共交通網(wǎng)絡(luò)圖[6-8],集成城市的基礎(chǔ)空間信息、路徑信息、公交站點(diǎn)空間數(shù)據(jù)和在營(yíng)的線路數(shù)據(jù)等信息,結(jié)合空間綜合分析和公交路徑算法實(shí)現(xiàn)了智慧公交系統(tǒng)。
系統(tǒng)采用數(shù)據(jù)管理層、中間邏輯層、顯示層三層架構(gòu)模式。數(shù)據(jù)管理層包括了空間數(shù)據(jù)和屬性數(shù)據(jù),主要是通過ArcSDE數(shù)據(jù)引擎連接空間數(shù)據(jù)和關(guān)系數(shù)據(jù)庫。在服務(wù)器與客戶端間,ArcSDE先將收集到的所有數(shù)據(jù)暫時(shí)存放于緩沖區(qū),再一次性發(fā)送到客戶端,這種傳輸方式大大提高了通過網(wǎng)絡(luò)傳輸大數(shù)據(jù)的效率,減少了傳輸時(shí)間。中間邏輯層主要采用ArcGIS Engine技術(shù),即組件式GIS集成二次開發(fā)[9-10],支持多種編程語言和開發(fā)工具,支持多種數(shù)據(jù)庫管理系統(tǒng)GIS功能組件化,既方便用戶進(jìn)行開發(fā),也方便GIS內(nèi)部調(diào)用,與數(shù)據(jù)庫連接靈活,僅需對(duì)原有數(shù)據(jù)進(jìn)行更新,就能更新空間數(shù)據(jù)信息。顯示層采用控件技術(shù),可以靈活方便地構(gòu)建各種界面,操作方便,界面友好。具體系統(tǒng)架構(gòu)如圖1所示。
圖1 系統(tǒng)架構(gòu)
顯示層:客戶端PC機(jī)上顯示該系統(tǒng)的界面。顯示層需要調(diào)用核心的邏輯業(yè)務(wù)模塊,并顯示具體邏輯功能處理的信息數(shù)據(jù),滿足客戶的需要。顯示層是一個(gè)展示層,展示用戶與系統(tǒng)交互的最終結(jié)果。
中間邏輯層:即調(diào)用的核心業(yè)務(wù)代碼,用來實(shí)現(xiàn)應(yīng)用程序的業(yè)務(wù)功能。業(yè)務(wù)層接收顯示層傳輸?shù)目蛻粽?qǐng)求消息,并調(diào)用對(duì)應(yīng)業(yè)務(wù)功能模塊進(jìn)行模塊化的信息處理,并將結(jié)果傳輸給顯示層展示。
數(shù)據(jù)管理層:主要對(duì)地理空間數(shù)據(jù)進(jìn)行管理。
空間數(shù)據(jù)模型是關(guān)于現(xiàn)實(shí)世界中地理實(shí)體及其相互間聯(lián)系的概念,為描述空間數(shù)據(jù)的組織和設(shè)計(jì)數(shù)據(jù)庫模式提供基本方法。空間數(shù)據(jù)模型與空間信息有關(guān)的信息模型有三個(gè),即基于對(duì)象的模型、網(wǎng)絡(luò)模型、場(chǎng)模型,該系統(tǒng)主要運(yùn)用了網(wǎng)絡(luò)模型。
在網(wǎng)絡(luò)模型中,公交站點(diǎn)、道路被抽象為鏈、節(jié)點(diǎn)等對(duì)象,同時(shí)要關(guān)注它們之間的連通關(guān)系。
在實(shí)現(xiàn)最短路徑查詢前,都必須具備一個(gè)道路網(wǎng)絡(luò)數(shù)據(jù),否則該功能無法實(shí)現(xiàn),而道路網(wǎng)絡(luò)數(shù)據(jù)主要由道路、公交車站、公交路線和連接點(diǎn)信息等構(gòu)成,它們是道路網(wǎng)絡(luò)數(shù)據(jù)的核心。在設(shè)計(jì)道路網(wǎng)絡(luò)時(shí),值得注意的是,對(duì)于線路與線路相交的點(diǎn),可以表示出當(dāng)前道路通向方向。在設(shè)計(jì)空間數(shù)據(jù)時(shí),需要存儲(chǔ)每條路徑間交點(diǎn)的空間信息和記錄每條路徑的首節(jié)點(diǎn)和尾節(jié)點(diǎn)的空間信息,來表示道路與站點(diǎn)、道路與道路間的幾何關(guān)系。
該系統(tǒng)采用ArcSDE多源空間數(shù)據(jù)庫,保證了空間數(shù)據(jù)和屬性數(shù)據(jù)的存儲(chǔ)。采用Geodatabase數(shù)據(jù)模型,通過ArcCatalog將數(shù)據(jù)庫中的數(shù)據(jù)轉(zhuǎn)換為Geodatabase數(shù)據(jù)模型,再使用ArcSDE加載到數(shù)據(jù)庫中。系統(tǒng)的空間數(shù)據(jù)庫體系結(jié)構(gòu)如圖2所示。
圖2 空間數(shù)據(jù)庫體系結(jié)構(gòu)
路徑問題是圖論算法中經(jīng)常討論的一個(gè)問題,在于尋找圖(由節(jié)點(diǎn)和路線組成)中兩節(jié)點(diǎn)之間的最優(yōu)路線。首先線路分析的數(shù)學(xué)模型[11]有很多種,它們都有各自的優(yōu)缺點(diǎn)。對(duì)于線路復(fù)雜的城市公交網(wǎng)狀路線,要將復(fù)雜的交通路線情況抽象化成簡(jiǎn)單的拓?fù)淠P筒⒉缓?jiǎn)單,反而增加操作實(shí)現(xiàn)的難度。另外還有很多優(yōu)秀的算法,如Floyd算法[12-13]。那些相對(duì)簡(jiǎn)單的圖,采用多次Dijkstra算法相對(duì)適用,而復(fù)雜的圖,F(xiàn)loyd算法相對(duì)合適。而且,F(xiàn)loyd可以用來處理帶負(fù)邊權(quán)值的圖。除此之外,還有很多現(xiàn)實(shí)情況下必須考慮的因素。
在出行選擇公交線路時(shí)會(huì)考慮很多因素,如:換乘次數(shù)、耗時(shí)、乘車費(fèi)用、車輛始發(fā)數(shù)量、站點(diǎn)負(fù)載壓力等[14-15]。面對(duì)這些因素,做出最佳的選擇也不是一件容易的事情,所以必須給出一定的提示和多種選擇方案。大多數(shù)乘客在選擇出行公交線路時(shí),第一考慮的因素是直達(dá)車。例如換乘次數(shù),一般就考慮換乘一次,一般不會(huì)多于兩次,最后是乘車時(shí)間最短。中間換乘還要考慮換乘等待時(shí)間,需要步行的話還要考慮步行花費(fèi)時(shí)間;乘車所花費(fèi)的費(fèi)用也是重要的考慮因素。在同時(shí)考慮換乘次數(shù)、花費(fèi)時(shí)間與乘車費(fèi)用等多重因素的前提下,通過設(shè)計(jì)查詢系統(tǒng)提出最佳路徑選擇。
公交線路的形式有三種:去程和返程路線一致,去程和返程路線不一致和環(huán)形路線,如圖3所示。
圖3 公交線路的形式
由于線路的方向不同,以上三種線路形式全都以去程線路和返程線路抽象成兩條線路處理。
通過分析線路與站點(diǎn)、站點(diǎn)與站點(diǎn)的連接矩陣[16],只考慮在不超過兩次換乘的情況下,建立公交汽車線路與站點(diǎn)的交通模型,以及加上步行的模型。
模型一:
(1)以中途轉(zhuǎn)車最少為第一要素,路程最短為次要要素;
(2)路程最短為首要要素,轉(zhuǎn)車次數(shù)最少為次要要素。
模型二:步行一段路的復(fù)雜模型。
為了簡(jiǎn)化算法,很多因素暫不予考慮。
(1)出行選擇乘車路線,換乘次數(shù)不大于兩次;
(2)在行駛中,公交車為勻速暢通行駛,每站行駛時(shí)間相同;不考慮堵車、乘車高峰等問題;
(3)假如坐車期間需要步行,設(shè)定換乘次數(shù)僅一次;
(4)設(shè)定一次出行時(shí)步行次數(shù)最多為三次;
(5)假設(shè)每次步行的時(shí)間和距離相同。
具體實(shí)現(xiàn)步驟如下:
(1)Loci(A)表示站點(diǎn)A在第i條線路中的位置;
(2)Loci(A,B)表示從站點(diǎn)A到站點(diǎn)B的第i條線路;
(3)Ci(A,B)表示第i條線路從站點(diǎn)A到站點(diǎn)B的直達(dá)費(fèi)用;
(4)Ti(A,B)指兩地間的非換乘情況下的時(shí)間耗費(fèi),t表示相鄰站點(diǎn)之間平均行駛時(shí)間,t1表示一次步行的時(shí)間;
(5)Ni(A,B)表示第i條線路從站點(diǎn)A到站點(diǎn)B經(jīng)過的站數(shù);
(6)d表示一次步行的距離;
(7)G(A,d)指范圍d以內(nèi)的所有附近點(diǎn);
(8)V代指矩陣。
從A地到B地線路多種多樣,站點(diǎn)線路如圖4所示。
圖4 站點(diǎn)線路
從站點(diǎn)A到站點(diǎn)B的行車線路:
(1)是否有從站點(diǎn)A到站點(diǎn)B的直達(dá)線路。如果有,首先考慮直達(dá);假設(shè)含有多個(gè)直達(dá),選擇時(shí)間耗費(fèi)最少的那一個(gè)。
(2)如果沒有直達(dá)線路,優(yōu)先選擇一次換乘的方案。如果經(jīng)過站點(diǎn)A的線路和經(jīng)過站點(diǎn)B的線路存在公共站點(diǎn),就能在這里轉(zhuǎn)車。
然后假設(shè)不存在一次換乘的方案,再延續(xù)這種思路方式,繼續(xù)尋找解決方案。最后在可選擇的方案中,經(jīng)過仔細(xì)對(duì)比時(shí)間、費(fèi)用、換乘次數(shù),直到找到最理想的方案?,F(xiàn)在交通一般路線的覆蓋面積都比較廣泛,需換乘兩次以上的事件概率相對(duì)較低。其次,必須理解乘客的內(nèi)心想法,乘客肯定都是希望直達(dá)的,有時(shí)即使是多耗費(fèi)點(diǎn)時(shí)間和乘車費(fèi)用,也不愿意選擇換乘。
首先構(gòu)造線路與站點(diǎn)的連接矩陣Vk*n=(Vi,j)k*n,其中Vi,j=1表示站點(diǎn)j在第i條線路上,Vi,j=0表示站點(diǎn)j不在第i條線路上,k為線路總數(shù),n為站點(diǎn)總數(shù)。即使是去程、返程路徑相同,按兩條路徑來計(jì)算。
(1)錄入出發(fā)的站A和要到的站B;
(2)求出經(jīng)過出發(fā)點(diǎn)A的所有線路,再尋找B在不在其中,如果存在,就是直達(dá);如果不存在,就不是直達(dá);
(3)在矩陣中尋找經(jīng)過出發(fā)點(diǎn)A的所在每一項(xiàng),再看B和每一項(xiàng)的交集是否為1,如果都是1,則是直達(dá);反之,就不是直達(dá);
(4)假設(shè)有且僅有一條直達(dá)或是沒有,輸出結(jié)果。反之,則向下執(zhí)行;
(5)假設(shè)存在多條直達(dá),進(jìn)行篩選,將需要時(shí)間最低的列在前邊,需要時(shí)間多的根據(jù)大小依次列表輸出。
一次換乘數(shù)學(xué)模型算法設(shè)計(jì):
(1)輸入起始站點(diǎn)A和目的站點(diǎn)B;
(2)求出經(jīng)過A的所有線路集合Loci(A,C),i=1,2,…,N和經(jīng)過B的所有線路集合Locj(D,B),j=1,2,…,N;
(3)取出其中一條線路Loci(A,C)與Locj(D,B),判斷是否存在公共站點(diǎn),在連通矩陣V中,將第i行與第j行相加,如果結(jié)果中有2,說明具有公共站點(diǎn);
(4)如果線路Loci(A,C)與Locj(D,B)存在公共站點(diǎn),則C=D,判斷其同向關(guān)系,否則重新搜索線路;
(5)在搜索結(jié)果中進(jìn)行篩選,將需要路程最短的列在前邊,需要路程長(zhǎng)的根據(jù)大小依次列表輸出。計(jì)算出所有一次轉(zhuǎn)乘措施的乘車時(shí)間,耗費(fèi)時(shí)間最少的就是最佳換乘線路。
兩次換乘數(shù)學(xué)模型算法設(shè)計(jì):
(1)輸入起始站點(diǎn)A和目的站點(diǎn)B;
(2)求出經(jīng)過A的所有線路數(shù)據(jù)Loci(A,C),i=1,2,…,N和經(jīng)過B的所有線路數(shù)據(jù)Locj(D,B),j=1,2,…,N;
(3)任取一條線路Loci(A,C)與Locj(D,B),再在所有公交線路中取一條不同于線路Loci(A,C)與Locj(D,B)的線路Lock(E,F),其中k=1,2,…,m,m為線路總數(shù)。判斷線路 Loci(A,C)與Lock(E,F)以及Locj(D,B)與Lock(E,F)是否存在公共站點(diǎn)C=E和F=D,如果存在,繼續(xù)判斷站點(diǎn)A與C、C與D以及D與B是否同向;
(4)假設(shè)有這樣的公共汽車站點(diǎn),站點(diǎn)C和站點(diǎn)E是同一站點(diǎn),站點(diǎn)F和站點(diǎn)D是同一站點(diǎn),而且站點(diǎn)A、B、C、D方向全都相同,符合上述情形的路徑,就是轉(zhuǎn)乘兩次的方法,在搜索結(jié)果中進(jìn)行篩選,查找所有兩次換乘措施,耗費(fèi)時(shí)間最少的就是最佳換乘線路。將需要時(shí)間最低的列在前邊,需要時(shí)間多的根據(jù)大小依次列表輸出。再求轉(zhuǎn)車地點(diǎn),輸出結(jié)果,結(jié)束運(yùn)算。
在上述算法中并沒有考慮通過步行一段距離來進(jìn)行換乘,而現(xiàn)實(shí)生活中往往是需要選擇的。這樣,上面第一種算法計(jì)算出來的結(jié)果就不實(shí)用。假設(shè)現(xiàn)在在A站,附近的B站有需要的線路;按照第一種方法,計(jì)算出來的結(jié)果是在A站乘車出發(fā),到B站轉(zhuǎn)乘。這樣計(jì)算就多了一次轉(zhuǎn)車。步行一段距離的情況有如下三種:
(1)可以原地就近站點(diǎn)乘車,也可以步行一段距離后,到遠(yuǎn)一點(diǎn)的站點(diǎn)乘車,尋找直達(dá)更方便的線路;
(2)在需要轉(zhuǎn)車的情況下,下車的地方不一定是要轉(zhuǎn)車的地方,也可以選擇走一段路程,到另一個(gè)附近站點(diǎn)換乘更佳的線路;
(3)也可能出現(xiàn)在下車之后,距離目標(biāo)點(diǎn)很近,步行小段距離就可到達(dá)目的地的情形,這樣就不需要再換乘。
換乘數(shù)學(xué)模型算法與設(shè)計(jì):
(1)輸入起始站點(diǎn)A和目的站點(diǎn)B;
(2)任取站點(diǎn)M∈(A,d),任取經(jīng)過M的一條線路Loci(M,X),設(shè)M在Loci(M,X)上可到達(dá)的站點(diǎn)為M1,M2,…,Mn;任取站點(diǎn)C∈(B,d),任取經(jīng)過C的一條線路Locj(X,C),設(shè)C1,C2,…,Ck為線路Locj(X,C)上可到達(dá)站點(diǎn)C的所有站點(diǎn),對(duì)每一個(gè)Ck判斷是否屬于G(Mn,d)。若屬于,則Loci(M,X)與Locj(X,C)為A到B的步行換乘一次線路。此時(shí),若A=M,Mn=Ck,站點(diǎn)B與站點(diǎn)D是同一個(gè)站點(diǎn),表示不需要走路;假設(shè)只有兩個(gè)站點(diǎn)相同,表示需要走一次路;假設(shè)有且僅有一個(gè)站點(diǎn)相同,表示需要走兩次路;不然,就需要走三次路。若Ck不屬于G(Mn,d),則轉(zhuǎn)下一步;
(3)對(duì)所有Ck進(jìn)行搜索,對(duì)經(jīng)過站點(diǎn)C的所有線路Locj(X,C)進(jìn)行搜索,對(duì)G(B,d)中的所有站點(diǎn)進(jìn)行搜索;對(duì)經(jīng)過站點(diǎn)M的所有線路進(jìn)行搜索,對(duì)G(A,d)中的所有站點(diǎn)進(jìn)行搜索。
系統(tǒng)的開發(fā)平臺(tái)采用VS 2012,數(shù)據(jù)庫采用SQL SERVER 2008,交通網(wǎng)絡(luò)矢量化使用ArcGIS 10.2。
系統(tǒng)實(shí)驗(yàn)平臺(tái)采用四川省樂山市市中區(qū)交通路線為實(shí)驗(yàn)數(shù)據(jù),進(jìn)行了交通網(wǎng)絡(luò)矢量圖、公交網(wǎng)絡(luò)矢量圖的設(shè)計(jì)和制作以及空間數(shù)據(jù)的制作和數(shù)據(jù)導(dǎo)入,并根據(jù)公交站點(diǎn)間的距離和交通情況,生成了交通網(wǎng)絡(luò)分析數(shù)據(jù)和公交網(wǎng)絡(luò)分析數(shù)據(jù)。
通過對(duì)現(xiàn)代化城市公交系統(tǒng)狀況和GIS特點(diǎn)優(yōu)勢(shì)進(jìn)行探討,進(jìn)行了基于GIS智慧公交系統(tǒng)的設(shè)計(jì),并以樂山市公交系統(tǒng)為研發(fā)案例,在用ArcGIS建立樂山公交電子地圖的基礎(chǔ)上,基于ArcEngine的c#二次開發(fā),根據(jù)樂山市市中區(qū)公交線路、公交站點(diǎn)的分布情況,實(shí)現(xiàn)公交線路查詢、站點(diǎn)查詢和線路分析。該系統(tǒng)初步實(shí)現(xiàn)了對(duì)電子地圖放大、縮小,距離測(cè)量,鷹眼等功能,同時(shí)乘客可在系統(tǒng)中進(jìn)行公交線路查詢、公交站點(diǎn)查詢、換乘查詢等。
公交路線查詢?nèi)鐖D5所示,輸入需要查詢的路線的相關(guān)信息(路線名或路線代碼),電子地圖突出顯示相應(yīng)的路線,并以文本顯示該路線的信息(該路線通過的所有站點(diǎn)和發(fā)車時(shí)間等信息)。
圖5 公交路線查詢
輸入需要查詢的起點(diǎn)和終點(diǎn)的相關(guān)信息,如站點(diǎn)名、地點(diǎn)名點(diǎn)擊查詢按鈕,文本框列出可以乘坐的所有車次供選擇,并提供一種路徑最短的建議,地圖高亮顯示相應(yīng)的路線,并顯示站點(diǎn)的信息(通過該站點(diǎn)的路線名稱等)和圖片信息,系統(tǒng)會(huì)根據(jù)交通路徑網(wǎng)絡(luò)和公交路徑網(wǎng)絡(luò)進(jìn)行分析,生成最佳的路線以及換乘的路線,如圖6所示。
圖6 路線換乘
研究了GIS組件式開發(fā)的結(jié)構(gòu)和模式,結(jié)合ArcSDE建立了空間數(shù)據(jù)庫與關(guān)系數(shù)據(jù)庫之間的通信服務(wù),采用GIS技術(shù)的空間特性和網(wǎng)絡(luò)圖設(shè)計(jì)的特性,將城市的交通網(wǎng)絡(luò)線、公交網(wǎng)絡(luò)線、各站點(diǎn)信息、道路信息以及空間位置信息進(jìn)行有效整合,建立基于城市公交網(wǎng)絡(luò)的空間數(shù)據(jù)并進(jìn)行公交網(wǎng)絡(luò)路徑分析。通過分析公交換乘的兩種模型,設(shè)計(jì)了對(duì)應(yīng)公交算法,實(shí)現(xiàn)了智慧公交系統(tǒng),實(shí)現(xiàn)了精準(zhǔn)、智能、快捷的路徑換乘方案和智能的路徑導(dǎo)航等功能。最后以樂山市市中區(qū)的數(shù)據(jù)進(jìn)行系統(tǒng)驗(yàn)證,通過實(shí)驗(yàn)證明該設(shè)計(jì)方案和算法的正確性和實(shí)用性,為智慧公交系統(tǒng)的研究提供了一定的理論和技術(shù)參考。