張 凱,陳 峰,杜 警
(南京信息工程大學信息與控制學院,江蘇 南京 210044)
公交在城市公共交通中扮演著很重要的角色。然而,隨著城市化進程加快,城市規(guī)模不斷擴大,機動車數(shù)量不斷增加,交通擁堵、環(huán)境污染等問題日趨嚴重。城市公交在公共交通中的作用卻得不到發(fā)揮。“公交優(yōu)先”的課題應運而生。通過發(fā)展“公交優(yōu)先”,加大公交在城市公共交通運輸中的比重,從而緩解交通擁堵、環(huán)境污染等問題。為了吸引更多人乘坐公交出行,國內(nèi)外開發(fā)出許多城市公交查詢系統(tǒng)以服務于公眾。國外發(fā)達國家主要采用差分GPS定位技術、交通流誘導技術、地圖匹配技術、電子技術、地理信息技術和智能卡等先進技術,形成了集網(wǎng)絡通信、信息化服務為一體的先進的公共交通規(guī)劃和管理系統(tǒng)。國內(nèi)研究雖然起步較晚,但發(fā)展迅速。在一些大城市智能公交電子站牌已經(jīng)投入使用,互聯(lián)網(wǎng)上也陸續(xù)推出公交在線查詢系統(tǒng)。隨著物聯(lián)網(wǎng)和云計算技術的發(fā)展,國內(nèi)學者也著手研究它們在城市智能交通中的應用,最新的車聯(lián)網(wǎng)技術就是其成果[1]。
本文結合實際需求,使用百度地圖接口技術設計一種基于移動客戶端的公交實時位置查詢系統(tǒng),實現(xiàn)公交實時位置、公交數(shù)量等信息的查詢。
本文所要設計的城市公交實時位置手機查詢系統(tǒng)是一個基于互聯(lián)網(wǎng)的應用, 設計查詢系統(tǒng)的客戶端采用Web App實現(xiàn)。Web App是指基于Web的系統(tǒng)和應用。Web App相對于本地安裝程序(Native App)有著開發(fā)成本低、適配多種移動設備、跨平臺和終端、迭代更新容易、無需安裝成本等優(yōu)勢。隨著網(wǎng)絡帶寬的不斷增加,移動終端將成為網(wǎng)絡中心,互聯(lián)網(wǎng)從信息網(wǎng)絡向應用網(wǎng)絡遷徙,App成為應用基本形態(tài),Web App成為趨勢,Native App將向Web App演進[2]。當然,任何新事物的發(fā)展都會面臨著諸多挑戰(zhàn)。對于本系統(tǒng),設計Web App效果圖如圖1所示,通過百度搜索引擎搜索“智能公交”關鍵字,將搜出公交實時位置查詢工具,該工具即是一個Web App,點擊進入應用即可使用該工具,免去了紛繁復雜的本地安裝過程及日常對應用程序的升級維護,即點即用。

Figure 1 Web App impression drawing圖1 本系統(tǒng)Web App效果圖
由于客戶端采用Web App實現(xiàn),整個系統(tǒng)設計采用B/S架構,即瀏覽器/服務器架構[3]。B/S架構最大的優(yōu)點就是可以在任何地方進行操作而不用安裝任何專門的軟件,客戶端只需一臺能上網(wǎng)的設備,并在設備上安裝一個瀏覽器,通過瀏覽器訪問Web 服務器,并向Web服務器發(fā)出相應查詢指令;Web服務器則按照指令與數(shù)據(jù)庫服務器進行數(shù)據(jù)交互,并將結果返回到客戶端,完成查詢。另外,B/S結構的廣泛使用推動AJAX技術的發(fā)展,AJAX增加網(wǎng)頁的交互性,能進行局部實時刷新。AJAX的局部實時刷新功能對于地圖類應用的發(fā)展是革命性的,地圖數(shù)據(jù)信息的更新不必再靠刷新整個網(wǎng)頁來完成,數(shù)據(jù)信息的變更將動態(tài)地反映在地圖上,使得人機界面更友好的同時又能減輕Web服務器和客戶端的壓力,保障系統(tǒng)穩(wěn)定、可靠地運行。
為了讓公交信息更加直觀形象地呈現(xiàn)到客戶端,將結合地圖開發(fā)。經(jīng)研究,利用百度地圖API實現(xiàn)整個查詢系統(tǒng)功能。百度地圖API是一套由JavaScript語言編寫的應用程序接口,為開發(fā)者提供了豐富的函數(shù)、控件、事件和封裝的類,能夠幫助我們在網(wǎng)站中構建功能豐富、交互性強的地圖應用程序[4]。
整個系統(tǒng)的工作原理如圖2所示,在公交車上集成GPS模塊(GPS Module),GPS模塊通過衛(wèi)星定位計算出公交車的經(jīng)緯度;同時,經(jīng)緯度數(shù)據(jù)經(jīng)GPRS DTU傳送至數(shù)據(jù)庫服務器,用戶使用智能手機等設備經(jīng)WLAN/WiFi網(wǎng)絡訪問Web服務器,進入該Web App,按照需求發(fā)出查詢請求,Web服務器根據(jù)請求從數(shù)據(jù)庫調(diào)出相應的公交實時信息并標注到百度地圖中[5]。對于客戶端發(fā)出的查詢請求,隨著時間推移,公交位置的變化則會刷新地圖中相應標注的位置,從而在地圖中動態(tài)模擬出公交的實時位置。

Figure 2 System principle diagram圖2 系統(tǒng)工作原理圖
系統(tǒng)數(shù)據(jù)庫采用SQL Server 2005,不同于以往的數(shù)據(jù)庫服務器系統(tǒng),SQL Server 2005是一個網(wǎng)絡數(shù)據(jù)庫服務器,但實質(zhì)上它既是一個關系型數(shù)據(jù)庫,也是一個數(shù)據(jù)分析平臺。本系統(tǒng)中數(shù)據(jù)庫主要用于存儲公交車輛的經(jīng)緯度數(shù)據(jù)。由于公交數(shù)量的眾多導致數(shù)據(jù)量比較龐大,但是SQL Server 2005強大的數(shù)據(jù)庫引擎為系統(tǒng)的可靠運行提供了有力的支持,可以用于構建和管理高性能的數(shù)據(jù)應用程序[6]。
一個城市中有很多條公交路線,每個路線中有多輛運營的公交車。對于用戶的出行,用戶只需查詢某條特定的公交路線上公交車輛的實時信息。因此,可以以公交路線為查詢依據(jù),在查詢框中輸入所需查詢路線名,該路線上的公交車信息即刻反映到地圖上,實現(xiàn)查詢功能。按照系統(tǒng)功能要求,創(chuàng)建名為gpspoint的數(shù)據(jù)庫,并為每條公交路線建立相應的數(shù)據(jù)表,用于存儲該路線上所有的公交車輛的實時經(jīng)緯度數(shù)據(jù)。以gpspoint數(shù)據(jù)庫中l(wèi)ine97表為例,設置經(jīng)緯度表結構如表1所示。
lng1、lat1分別定義為第一輛97路公交車的經(jīng)度和緯度,lng2、lat2分別定義為第二輛97路公交車的經(jīng)度和緯度,以此類推,定義完路線上所有公交車輛的經(jīng)緯度。

Table 1 Table of the latitude and longitude structure表1 經(jīng)緯度表結構
公交實時位置手機查詢系統(tǒng)最關鍵的技術是將后臺數(shù)據(jù)庫中的經(jīng)緯度數(shù)據(jù)調(diào)出到Web App地圖中動態(tài)顯示,實現(xiàn)前端界面和數(shù)據(jù)庫的通信是基礎。Web App前端界面采用驅(qū)動方式與SQL Server 2005連接,對ODBC進行配置,確定數(shù)據(jù)源及其數(shù)據(jù)訪問路徑。
以表line97為例,實現(xiàn)與gpspoint數(shù)據(jù)庫的連接之后,需將lng1、lat1數(shù)據(jù)加載到地圖頁面中。這一步是實現(xiàn)整個系統(tǒng)功能的關鍵。經(jīng)測試,數(shù)據(jù)庫中的經(jīng)緯度數(shù)據(jù)不能被前端地圖界面直接調(diào)用,必須在調(diào)出后經(jīng)過相應數(shù)據(jù)轉換,前端地圖頁面才能識別。考慮到本系統(tǒng)對實時性具有較高的要求,因此系統(tǒng)運行的效率必須高。經(jīng)研究,采用RecordsetSet對象的getrows方法將數(shù)據(jù)提取出來,具體實現(xiàn)代碼如下:
Sqlstr=“select lng1,lat1 from line97”
Setrs=conn.Execute(sqlstr)
myarry=rs.GetRows()
rs.close
conn.close
對于數(shù)據(jù)庫數(shù)據(jù)的操作,一般要用到RecordSet對象,getrows方法傳回一個二維的數(shù)組變量,在操作數(shù)組速度上比RecordSet對象的MoveNext方法快很多,而且可以在取出數(shù)組后盡早釋放RecordSet對象,從而減少系統(tǒng)資源的占用,提高程序執(zhí)行效率,優(yōu)化系統(tǒng)的性能[7]。使用getrows方法傳回一個二維的數(shù)組,進行相應的數(shù)據(jù)轉換,即把傳回的數(shù)組賦給一個JavaScript數(shù)組,實現(xiàn)代碼如下:
%〉
Fori=0 touBound(myarry,2)
%〉
points[“〈%=i%〉”]=newBmap.point
(“〈%=myarry(0,i)%〉”,”〈%=myarry(1,i)%〉”);
%〉
Next
%〉
其中,uBound返回一個long型數(shù)據(jù),其值為指定的數(shù)組維可用的最大下標。points[“〈%=i%〉”]被定義為接受數(shù)據(jù)的JavaScript數(shù)組,〈%=myarry(0,i)%〉為傳回至JavaScript數(shù)組中的經(jīng)度,〈%=myarry(1,i)%〉為傳回至JavaScript數(shù)組中的緯度。
API自1.1版本起開始支持iPhone、Android這樣的移動平臺。用戶通過手機瀏覽器就可以訪問由地圖API創(chuàng)建出來的應用。開發(fā)地圖類應用首先需完成地圖的實例化和初始化,然后向地圖中添加支持鼠標拖拽、滾輪縮放、雙擊放大等交互功能的控件。為了優(yōu)化用戶的頁面體驗,可以通過Control類來實現(xiàn)自定義控件。地圖控件添加完成后,根據(jù)系統(tǒng)所需實現(xiàn)的功能,利用JavaScript調(diào)用相應的百度地圖API。本系統(tǒng)中調(diào)用了城市查找API、公交路線獲取API等。該公交實時位置手機查詢系統(tǒng)調(diào)用百度地圖API方法如下:
〈script type=“text/javascript”〉
map.enableScrollWheelZoom();
map.enableKeyboard();
map.enableContinuousZoom();
map.enableInertialDragging();
function $(id)
{
returndocument.getElementById(id);}
varcity=newBMap.LocalSearch(map,
{renderOption:{map:map,autoViewport:true}});//地圖顯示到查詢結果處
function search()
{
vars=$(“txtSearch”).value;
city.search(s);//查找城市
}
functionMapMove(pointMover)
{
if(document.getElementById("MarkerMove").checked)
moveMarker.setPoint(pointMover.point);
if(document.getElementById("MapMove").checked)
map.panTo(pointMover.point);
}//調(diào)用移動函數(shù)
…
〈/Script〉
系統(tǒng)采用的GPS模塊獲取的經(jīng)緯度屬于WGS84坐標系,而百度地圖API采用的是百度自己的坐標系,簡稱百度坐標系。如果將獲取的GPS經(jīng)緯度不加以處理直接在百度地上標注,則會出現(xiàn)偏差,即所謂的地圖偏移。百度坐標系和WGS84坐標系的關系如圖3所示。

Figure 3 WGS84 and Baidu coordinate system圖3 WGS84與百度坐標系
其中,Ps是P點在WGS84坐標系中的位置,T是坐標系原點相對位移矢量,ωx、ωy、ωz是坐標系旋轉角度。
根據(jù)上圖利用布爾莎七參數(shù)法得出模型為:
其中,ΔX0、ΔY0、ΔZ0是平移參數(shù);m是尺度比參數(shù);εx、εy、εz是旋轉參數(shù)。
采用間接平差模型進行解算:V=AX-L,
其中,V為殘差矩陣;X為未知七參數(shù);A為系數(shù)矩陣;L為閉合差。
解之:
X=(ATA)-1ATL
求得七參數(shù)的值后,每輸入一個WGS84坐標值,就能求出它在百度坐標系中的坐標。求出的坐標為空間直角坐標,要應用于平面地圖中還需進行投影[8]。百度地圖采用的是墨卡托投影,求出的空間直角坐標需代入墨卡托投影正解公式進行投影:
設空間直角坐標為(B1,L1),投影坐標為(X1,Y1),標準緯度為B0,原點緯度為0,原點經(jīng)度為L0,則:

Y1=K(L1-L0)


整個系統(tǒng)的開發(fā)主要使用HTML、JavaScript語言進行編程,系統(tǒng)的各部分功能的實現(xiàn)是通過JavaScript調(diào)用百度地圖API,根據(jù)系統(tǒng)功能要求合理組合設計完成。系統(tǒng)主體功能設計完成后,在局域網(wǎng)中進行了測試,使用智能手機進入該Web App,界面如圖4所示。

Figure 4 Mobile phone test interface圖4 手機測試界面
以南京市97路公交為例。在“城市”搜索框中輸入“南京”,點擊“GO”按鈕,則定位至南京市地圖。在“公交路線”搜索框中輸入“97”,點擊“搜索”按鈕,則高亮整條97路公交路線,并在右邊面板上按序顯示出該路線上所有的站臺名。最后點擊“開始監(jiān)控”按鈕,則系統(tǒng)開始運行。其中,紅色的標注表示上行車輛,綠色的標注表示下行車輛,白圈代表公交站臺。由于有白圈的參照,用戶就能掌握公交所在具體位置,達到對公交車輛實時監(jiān)控的目的。
從系統(tǒng)界面效果看,雖然手機屏幕較小,但由于手機采用的是觸摸屏,并且地圖中添加了支持縮放、拖拽等控件,使得對系統(tǒng)的操作不受太大影響,在某種程度上其操控性更好。從運行效果看,地圖中相應區(qū)塊每1秒鐘動態(tài)刷新1次,基本能滿足實時查詢的要求。另外,由于現(xiàn)階段移動設備還不能完美支持AJAX技術,可能或出現(xiàn)網(wǎng)絡延遲,即用戶發(fā)出請求到服務器發(fā)出響應之間的間隔。通常的解決方案是,使用一個可視化的組件來告訴用戶系統(tǒng)正在進行后臺操作并且正在讀取數(shù)據(jù)和內(nèi)容。
在公交出行中,準確地掌握城市公交所處位置是交通參與者進行出行規(guī)劃的前提。本文從實際需求出發(fā),闡述了城市公交實時位置手機查詢系統(tǒng)的設計過程及采用的技術。經(jīng)測試,系統(tǒng)具有一定的可行性。另外,城市智能公交系統(tǒng)是一個復雜、涉及多方面的系統(tǒng),還有很多問題值得深入研究。例如,本系統(tǒng)只是智能公交系統(tǒng)的一個子系統(tǒng),其如何與現(xiàn)行的智能公交系統(tǒng)融合、系統(tǒng)安全性怎樣等問題,都需要在進一步研究中完善。
[1] Wu Yong, Xing Jian-ping, Ma Zhen-liang. Research on new generation of city public transportation information system based on internet of things and cloud computing technology[C]∥Proc of the 7th China Intelligent Transport Annual Meeting Symposium-Intelligent Transportation Applications,2012:1. (in Chinese)
[2] Chen Yong. Analysis and prospect of Web app status[J]. Communication & Information Technology, 2012(4):77-78. (in Chinese)
[3] Zhao Jian-li. A multi-mode service vehicle monitoring system[J]. Computer Engineering & Science, 2009,31(10):136-139. (in Chinese)
[4] Yu Xian. The monitoring system of dangerous goods vehicle based on GPS/Google API[D]. Hangzhou:Hangzhou Dianzi University, 2011. (in Chinese)
[5] Gong Hong-mian, Chen C, Bialostozky E, et al. A GPS/GIS method for travel mode detection in New York City[J]. Computers, Environment and Urban Systems, 2012,36(2):131-139.
[6] Gong Yan-jun.Design and implementation of the real-time vehicle monitoring system based on the internet[D]. Beijing:Beijing University of Posts and Telecommunications, 2012. (in Chinese)
[7] Wei Zheng, Wang Jun, Cui Tong-liang. ADO.NET program design course and experiment[M]. Beijing:Tsinghua University Press, 2007. (in Chinese)
[8] Chen Shu. The design and study on map projection transformation[J]. Geomatics & Spatial Information Technology, 2012,35(4):165-170. (in Chinese)
附中文參考文獻:
[1] 武勇,邢建平,馬振良. 基于物聯(lián)網(wǎng)和云計算技術的新一代城市公交信息化體系研究[C]∥第七屆中國智能交通年會優(yōu)秀論文集-智能交通應用, 2012:1.
[2] 陳勇. Web App現(xiàn)狀分析及展望[J]. 通信與通信技術, 2012(4):77-78.
[3] 趙建立. 一種多服務模式的車輛監(jiān)控系統(tǒng)[J]. 計算機工程與科學, 2009,31(10):136-139.
[4] 余弦. 基于GPS/Google API的危險品車輛監(jiān)控系統(tǒng)及應用[D]. 杭州:杭州電子科技大學, 2011.
[6] 貢巖軍. 基于互聯(lián)網(wǎng)的車輛實時監(jiān)控系統(tǒng)的設計與實現(xiàn)[D]. 北京:北京郵電大學, 2012.
[7] 魏崢,王軍,崔同良. ADO.NET程序設計教程與實驗[M]. 北京:清華大學出版社, 2007.
[8] 陳姝. 地圖投影轉換類的設計與研究[J]. 測繪與空間地理信息, 2012,35(4):165-170.