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

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

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

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

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

Y1=K(L1-L0)


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

Figure 4 Mobile phone test interface圖4 手機測試界面
以南京市97路公交為例。在“城市”搜索框中輸入“南京”,點擊“GO”按鈕,則定位至南京市地圖。在“公交路線”搜索框中輸入“97”,點擊“搜索”按鈕,則高亮整條97路公交路線,并在右邊面板上按序顯示出該路線上所有的站臺名。最后點擊“開始監控”按鈕,則系統開始運行。其中,紅色的標注表示上行車輛,綠色的標注表示下行車輛,白圈代表公交站臺。由于有白圈的參照,用戶就能掌握公交所在具體位置,達到對公交車輛實時監控的目的。
從系統界面效果看,雖然手機屏幕較小,但由于手機采用的是觸摸屏,并且地圖中添加了支持縮放、拖拽等控件,使得對系統的操作不受太大影響,在某種程度上其操控性更好。從運行效果看,地圖中相應區塊每1秒鐘動態刷新1次,基本能滿足實時查詢的要求。另外,由于現階段移動設備還不能完美支持AJAX技術,可能或出現網絡延遲,即用戶發出請求到服務器發出響應之間的間隔。通常的解決方案是,使用一個可視化的組件來告訴用戶系統正在進行后臺操作并且正在讀取數據和內容。
在公交出行中,準確地掌握城市公交所處位置是交通參與者進行出行規劃的前提。本文從實際需求出發,闡述了城市公交實時位置手機查詢系統的設計過程及采用的技術。經測試,系統具有一定的可行性。另外,城市智能公交系統是一個復雜、涉及多方面的系統,還有很多問題值得深入研究。例如,本系統只是智能公交系統的一個子系統,其如何與現行的智能公交系統融合、系統安全性怎樣等問題,都需要在進一步研究中完善。
[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] 武勇,邢建平,馬振良. 基于物聯網和云計算技術的新一代城市公交信息化體系研究[C]∥第七屆中國智能交通年會優秀論文集-智能交通應用, 2012:1.
[2] 陳勇. Web App現狀分析及展望[J]. 通信與通信技術, 2012(4):77-78.
[3] 趙建立. 一種多服務模式的車輛監控系統[J]. 計算機工程與科學, 2009,31(10):136-139.
[4] 余弦. 基于GPS/Google API的危險品車輛監控系統及應用[D]. 杭州:杭州電子科技大學, 2011.
[6] 貢巖軍. 基于互聯網的車輛實時監控系統的設計與實現[D]. 北京:北京郵電大學, 2012.
[7] 魏崢,王軍,崔同良. ADO.NET程序設計教程與實驗[M]. 北京:清華大學出版社, 2007.
[8] 陳姝. 地圖投影轉換類的設計與研究[J]. 測繪與空間地理信息, 2012,35(4):165-170.