文 斌, 李代偉
(成都信息工程學院,四川成都 610225)
隨著經(jīng)濟和社會的發(fā)展,城市化進程進一步加快,城市公交系統(tǒng)也進一步擴大并愈發(fā)完善,幾乎覆蓋了城市的每一個角落。公交車也隨之成為許多人出行的主要交通工具。但是越來越復雜的公交線路也使人們很難找到正確的公交信息,并對人們的出行安排造成極大的不便。國外一些發(fā)達國家的公交信息查詢系統(tǒng)已經(jīng)發(fā)展到一個比較先進的水平,然而由于信息技術(shù)起步較遲,相關(guān)法律法規(guī)及管理不夠完善等原因,中國的公交查詢系統(tǒng)與國外先進水平相比還有很大差距,國內(nèi)已有的一些公交信息查詢系統(tǒng)或多或少都存在一些不足。因此,設計一個能夠準確、快速查詢公交信息的系統(tǒng)為外來游客和市民提供準確、快速的公交信息查詢服務,使他們能夠及時地了解到自己所需要的公交信息,合理規(guī)劃出行線路,節(jié)約出行時間十分必要。同時著眼于未來公交查詢系統(tǒng)的發(fā)展方向,設計了這個基于Android的公交輔助導航系統(tǒng)。
Android手機系統(tǒng)是基于Linux平臺的開源手機操作系統(tǒng),分為4個層,從高層到低層分別是應用程序?qū)印贸绦蚩蚣軐印⑾到y(tǒng)運行庫層和Linux核心層[1]。采用軟件堆層(software stack),又名軟件疊層的架構(gòu),主要分為3部分。底層以Linux內(nèi)核工作為基礎(chǔ),由C語言開發(fā),只提供基本功能;中間層包括函數(shù)庫Library和虛擬機(virtual machine),由C++開發(fā),最上層是各種應用軟件。Android系統(tǒng)架構(gòu)由5部分組成,分別是Linux Kernel,Android Runtime,Libraries,Application Framework,Applications[2-3]。
百度地圖應用程序編程接口(Baidu maps Application Programming Interface,百度地圖API)是一套由JavaScript語言編寫的應用程序接口,能夠幫助開發(fā)人員在網(wǎng)站中構(gòu)建功能豐富、交互性強的地圖應用程序。百度地圖API不僅包含構(gòu)建地圖的基本功能接口,還提供諸如本地搜索、路線規(guī)劃等數(shù)據(jù)服務。其中包含了構(gòu)建地圖基本功能的多個接口,提供諸如位置搜索、周邊查詢、出行路線規(guī)劃等功能服務。百度地圖API服務免費開放,并提供基于移動設備和瀏覽器的兩套API。百度地圖移動版API是一套基于移動互聯(lián)網(wǎng)設備的應用程序接口,支持iOS/Android平臺。
系統(tǒng)主要由3層構(gòu)成。位于最上端的用戶界面層直接與用戶交互,負責接收用戶查詢信息和反饋查詢的數(shù)據(jù)。位于中間層的兩個大的模塊主要完成系統(tǒng)的查詢、分析等邏輯操作,分別同SQLite數(shù)據(jù)庫和百度地圖API進行數(shù)據(jù)交互。位于底層的兩個部分,SQLite數(shù)據(jù)庫主要負責存放所有公交信息數(shù)據(jù),而百度地圖API負責提供用于訪問網(wǎng)絡服務器的接口,如圖1所示[4-5]。
公交查詢算法是系統(tǒng)離線查詢功能實現(xiàn)的核心部分,因為它保證了系統(tǒng)能快速、準確的搜索到用戶需要查詢的公交車乘車信息。
2.2.1 基于線路與站點的直達車搜索算法
直達車搜索目的是找到起止站點之間是否有直接到達而不用換乘的公交線路。搜索算法以線路與站點關(guān)系表為基礎(chǔ),其實現(xiàn)流程如圖2所示[6]。
為了完成直達車搜索,首先在數(shù)據(jù)庫中建立站點和公交線路關(guān)系表以存放公交站點(station)、公交線路(busline)、站點位于公交線路中的第幾站(stationnumber)、公交車行駛方向(direction)等數(shù)據(jù)。在進行直達車搜索時可以將數(shù)據(jù)源想象成具有相同數(shù)據(jù)的兩張表t1和t2,查詢時首先在t1中找到會經(jīng)過起點站的公交線路,在t2中找到會經(jīng)過終點站的公交線路,之后判斷兩條線路的編號是否相同。若不同,則比較下一對數(shù)據(jù);若相同再判斷終點站是否位于起點站之后(即t2.stationnumber>t1.stationinumber)。若成立,則提取出公交線路,否則返回比較下一對數(shù)據(jù)。具體判定條件如下:
(1)約束條件t1.busline=t2.busline是為了保證在兩張表中找到的公交線路是同一條。
(2)約束條件t1.direction=t2.direction是為了保證在兩張表中搜索到的公交線路方向一致,即同為上行線路或者同為下行線路。
(3)約束條件t1.stationnumber<t2.stationnumber是為了保證用戶輸入的終點站位于起點站的后面。如果不加這個條件則搜索到的結(jié)果當中會出現(xiàn)一種錯誤的情況,就是系統(tǒng)會告訴用戶,除了可以乘坐那條正確的線路之外,還可以乘坐同一趟公交車的返程線路,但由于公交車會先經(jīng)過用戶輸入的終點站然后才經(jīng)過起點站,因此實際上這是一個錯誤的乘車方案。
2.2.2 基于直達車線路和站點的換乘車搜索算法
現(xiàn)有的換乘算法很多是通過找到所有經(jīng)過起點站和終點站的公交車線路,然后再比對這些線路當中有沒有交叉點(即換乘站點)來確定是否能找到換乘線路,但這樣的換乘搜索算法效率較低[7]。系統(tǒng)設計了另外一種優(yōu)化后的換乘搜索算法,即換乘的線路是由一段又一段的直達車線路組合而成的,前一段的終點站和后一段的起點站相同。通過數(shù)據(jù)庫中建立相關(guān)視圖可以完成換乘車線路的搜索,其實現(xiàn)流程如圖3所示[8]。
為了完成換乘車的搜索,在直達車搜索數(shù)據(jù)表的基礎(chǔ)上建立公交車換乘數(shù)據(jù)視圖,以存放換乘查詢所需要的數(shù)據(jù),包括起點站(startStop)、終點站(endStop)、公交線路編號(lineID)、起點站與終點站之間的站點數(shù)(stop-Count)等數(shù)據(jù)。換乘線路可以想象成是由一段一段的直達線路連接而成的,在查詢時,把建立的視圖當成兩個存放了相同數(shù)據(jù)信息的表t3和t4,先在t3中找到startStop為要查詢的起點站的數(shù)據(jù)行對應的公交車線路和t4中endStop為要查詢的終點站的數(shù)據(jù)行所對應的公交車線路,判斷t3中公交車線路的endStop與t4中公交車線路的startStop是否相同。若不同則重新查詢;若相同在判斷兩條線路的編碼是否相同,若再相同,重新查詢,若不同,則返回查詢到的公交線路。具體判定條件如下:

圖1 系統(tǒng)總體架構(gòu)
(1)約束條件t3.startStop=‘起點站名稱'和t4.endStop=‘終點站名稱'是為了保證系統(tǒng)查詢到的結(jié)果當中起點站和終點站與用戶輸入的查詢數(shù)據(jù)相匹配。
(2)約束條件t3.endStop=t4.startStop保證前一段直達線路的終點站和下一個直達線路的起點站相同。
(3)約束條件t3.lineID<>t4.lineID保證前一段直達線路的編號應該和后一段直達線路的編號不同。

圖2 基于線路與站點的直達車搜索算法流程圖

圖3 基于直達車線路和站點的換乘車搜索算法流程圖
2.2.3 出行線路規(guī)劃
出行線路規(guī)劃功能可以幫助用戶查詢到達目的地的所有直達車或換乘車的車次及中轉(zhuǎn)站點的信息。用戶只需要輸入起點站和終點站的名稱,系統(tǒng)就會根據(jù)設計好的工具查詢算法以及數(shù)據(jù)庫中的數(shù)據(jù)為用戶設計出一條或幾條合適的出行線路,其實現(xiàn)體流程圖如圖4所示,功能實現(xiàn)如圖5所示。

圖4 出行線路規(guī)劃流程圖

圖5 出行線路規(guī)劃結(jié)果
出行線路規(guī)劃功能除了可以提供上述服務以外,還可以配合GPS功能為用戶提供公交報站服務[9]。服務可以讓用戶清楚地了解自己搭乘公交車當前所處位置。當用戶所搭乘公交車到達換乘站點或目的地站點時還會有相應語音提示以防用戶錯過站點。其實現(xiàn)流程圖如圖6所示,功能實現(xiàn)如圖7所示。

圖6 到站提醒流程圖

圖7 到站提醒結(jié)果
2.2.4 POI搜索
當對目的地信息不明確時,通過興趣點搜索(Point of Interest Search,POI搜索)解決。只需要輸入目的地名稱,系統(tǒng)便會向服務器發(fā)出請求,在百度地圖上顯示所有查詢信息點位置,用戶任選其中一處,在地圖上用黑粗線的方式顯示出到目的地的路徑,其實現(xiàn)流程圖如圖8所示,功能實現(xiàn)如圖9所示。

圖8 POI搜索流程圖

圖9 POI搜索結(jié)果
當用戶找到了自己想要去的地方后,功能并沒有完成,因為他還不知道要怎么到達目的地。POI搜索模塊不僅可以為用戶搜索到自己的目的地,還可以進一步提供導航服務。用戶只需要選擇自己要到的目的地,然后點擊導航,系統(tǒng)就會為他設計出一個合適的線路并且在地圖上顯示出來。在使用該功能的時候用戶只需要在POI搜索結(jié)果頁面的下拉菜單中選擇目的地,系統(tǒng)自動將用戶所在的位置作為出發(fā)地,然后向服務器發(fā)送查詢請求,得到結(jié)果后將路線信息顯示在另一張地圖上。其實現(xiàn)流程圖如圖10所示,功能實現(xiàn)如圖11所示。

圖10 POI目的地導航流程圖

圖11 POI目的地導航結(jié)果
在面對龐大的公交網(wǎng)絡和錯綜復雜的公交信息時,基于Android的移動公交輔助導航系統(tǒng)能簡單快速的查詢城市公交信息。能提供實時的移動的公交線路查詢、公交站點查詢、出行線路規(guī)劃3個主要服務。系統(tǒng)具有如下優(yōu)勢:
(1)能提供POI搜索服務,提示相關(guān)信息供用戶參考。
(2)將離線查詢功能和在線查詢功能融合在一起,可以相互彌補對方的不足,共同完成公交信息的查詢服務,保證了用戶在任何時間和任何地點都可以在使用非常節(jié)省資源的方式快速找到自己想要的公交信息。
(3)借助移動設備,結(jié)合GPS功能通過給語音報站和轉(zhuǎn)乘提示功能,給用戶提供了方便。
Android系統(tǒng)網(wǎng)絡集成性很高,百度地圖Android應用,具備免費語音導航功能,正式切入手機導航市場。而iPhone版和Symbian版均尚未上線語音導航功能。百度導航的重力感應功能、高仿真3D效果顯示建筑與道路實景圖,更可為用戶規(guī)劃出行道路,并提供全程瀏覽等。開發(fā)的“基于Android的公交輔助導航系統(tǒng)”是為了方便那些乘坐公交車的人群,使他們在乘坐公交車時,及時了解位置,也可以通過公交信息查詢、出行線路規(guī)劃等服務綜合了解當時所處的狀況,自我進行判斷、處理問題。把程序整合到手機設備上主要是利用了移動設備的便攜性,為人們的日常生活帶來更多的便利。當前搭載Android系統(tǒng)的移動設備已被普遍使用,系統(tǒng)具有良好的應用前景。
[1] 郭宏志.Android應用開發(fā)詳解[M].北京:電子工業(yè)出版社,2010.
[2] 徐光俠,封雷.基于Android和Google Maps的生活輔助系統(tǒng)的設計與實現(xiàn)[J].重慶郵電大學學報(自然科學版),2012,24(2):242-246.
[3] KUMAR S,QADEER M A,GUPTA A.Location based services using android(LBSOID)[C].IEEE.2009 IEEE International Conference on Internet Multimedia ServicesArchitecture and Applications(IMSAA).Bangalore:IEEE Press,2009:1-5.
[4] LI Xu-dong,YAN Gao-shi,TANG Hai.Android Based Wireless Location and Surrounding Search System De-sign[C].2010 Ninth International Symposium on Distributed Computing and Applications to Business Engineering and Science(DCABES).Hong Kong:IEEE Press,2010:421-423.
[5] 廖軍,郭達.移動互聯(lián)網(wǎng)應用趨勢——基于Web的終端平臺[J].信息通信技術(shù),2010,17(4):20-23.
[6] 陳文磊,肖俊超,董勐.公交線路查詢系統(tǒng)算法設計與實現(xiàn)[J].高等函授學報(自然科學版),2008,(3):49-51.
[7] 羅小龍.公交查詢算法優(yōu)化[J].城市勘測,2009,(4):36-37.
[8] 周潛,歐宜貴.公交線路查詢算法的設計與實現(xiàn)[J].海南大學學報(自然科學版),2010,(2):105-107.
[9] 劉勝前,陳立定,任志剛.基于Android移動平臺和GPS應用服務研究[J].信息技術(shù),2012,(1):82-85.