劉高輝,袁 萌,林亞茹,何坤城
(西安理工大學自動化與信息學院,西安 710048)
近年來,我國的公交查詢系統迅速發展,不少城市都擁有了公交線路查詢系統,網絡上也可以下載到許多不同版本的公交查詢軟件[1]。但是,目前的公交查詢系統存在其不足之處:
1)目前的公交查詢系統不能向用戶提供所查詢路段的道路擁堵狀況信息,這將不利于乘客有選擇的乘車;2)目前西安的公交查詢系統也不能給客戶提供下一輛公交車的準確到達時間,造成用戶盲目等待某輛公交車,造成對時間的大量浪費[2]。
針對當前存在的公交管理系統的不足,本文中提出并設計了一個基于安卓手機的公交查詢系統,系統主體分為3個部分:模擬服務器、手機客戶端、模擬車輛終端,通過各部分之間的配合,實現安卓手機客戶端對指定線路公交車運行狀態的查詢,從而方便乘客選擇乘車[3]。
本系統的成功開發,不僅能夠實現用戶對公交信息的查詢,更重要的意義在于能夠將人、車、路三者結合起來,通過車況來反映路況信息,再通過服務器將信息發布到手機客戶端,從而達到方便乘客出行的目的。另外,本系統也可作為交通查詢網絡的雛形,可以想象,如果進一步開發,可能形成一個巨大的交通信息網絡,這對于智能化交通以及提高公交管理水平都具有重要意義。
本公交查詢系統主體分為3個部分:模擬服務器、手機客戶端、車輛終端。圖1是系統總體結構圖。圖中,系統模擬服務器是指一個運行在電腦上的一個Java應用程序,該應用后面維護著一個數據庫,用來儲存公交運行中的各種數據;手機客戶端和模擬車輛終端都是運行在Android手機上的應用程序。
圖1 系統總體結構圖
系統各部分功能描述如下:
模擬服務器功能:(1)增加和刪除公交路線和行車線路;(2)接收并發布用戶選定的線路上公交車傳來的站點擁堵信息;(3)為用戶發布選定線路上下一輛到達的公交車所處站點。
手機客戶端功能:(1)調用百度地圖按公交路線 (如“11”)查詢行車線路;(2)查詢下一輛到達的公交車所處站點;(3)從服務器上獲取在選定線路上的公交傳回的道路擁堵信息。
模擬車輛終端功能:(1)向服務器發送自身的運行方向及所處的位置;(2)實時地向服務器發送該車所在運行區間的擁堵狀況。
系統總體功能基本是系統各部分功能的總和,是將系統各部分有機的結合在一起作為一個整體運行。系統的主要運行方式是:通過手機客戶端和模擬車輛終端向模擬服務器發出的請求來驅動模擬服務器更新數據庫以及反饋信息到客戶端。
模擬服務器是整個系統的核心,系統的其它模塊都要通過模擬服務器與別的部分產生聯系。模擬服務器后臺維護著一個子線程,該線程不斷地接受來自手機客戶端和模擬車輛終端傳來的消息,并對數據庫進行相應的更新或給手機客戶端和模擬車輛終端反饋相應的信息。
系統主界面是模擬服務器的中心界面,管理員通過登錄界面登錄到系統中就進入系統主界面,隨即系統主界面開啟了一個線程來處理來自模擬車輛終端和手機客戶端的請求。在主界面中管理員可以選擇完成“添加線路”、“修改線路”或者“刪除線路”來執行相應的操作,執行的效果會實時更新到數據庫里。
模擬服務器后臺連接著一個Access數據庫,該數據庫命名為bus,用來存儲系統中所要用到的一些數據。需要說明的是,Java中有多種訪問數據庫的方法,本系統采用的是把JDBC轉換成ODBC驅動器的方法,靠ODBC和數據庫建立通信連接[4]。
根據需求,本系統中建立了五張數據表來存儲數據,他們分別是:busLine、busLocation、stationLocation、station-StateGo和stationStateBack。需要說明的是,因為實際中全國公交線路過多,公交站點數更是難以計數,如果要全部錄入,勢必造成工作量過大。因此,本系統在設計時將重點放在各功能的實現上,只選取了西安市以‘1’開頭的部分線路作為樣本來驗證本系統的功能。
下面分別對這些數據表進行詳細介紹。
2.2.1 數據表busLine的設計
數據表busLine的作用是按順序存儲各公交線路上的站點信息,供用戶在已知公交線路的情況下查詢該條線路上的站點序列,設計為每條線路可以存儲70個公交站點。busLine中各字段說明如表1。
表1 數據表busLine各字段說明
需要說明的是,如果公交線路上的的站點數不足70站,則將不存在的站點名設為“xx”,表示不存在該站點。查詢數據表busLine可以獲取線路上的站點信息。
2.2.2 數據表busLocation的設計
數據表busLocation用來存儲每條公交線路上每輛公交車所在的站間區間以及運行方向信息,設計為每條公交線路上可以運行50輛公交車,其各字段如表2所示。
表2 數據表busLocation各字段說明
busLocation表,可以得到所查詢線路上所有公交車的位置信息。再結合每輛公交車的運行方向和乘客所在站點信息,就能計算出下一輛到達的公交車還有幾站到達。
2.2.3 數據表busStateBack的設計
數據表busStateBack用來存儲每條公交線路返程上每個站間區間的交通狀態,其各字段說明如表3所示。
表3 數據表busStateGo各字段說明
數據表busStateBack中的信息是根據車輛終端發回的道路狀態信息進行實時更新的。每個站間的交通狀態有五種可選取值:state、state1、state2、state3和 state4。其中,state為默認狀態,當未收到來自車輛終端的更新該區間狀態的信息時,默認為state;state1表示“交通暢通”;state2表示“輕度擁堵”;state3表示“重度擁堵”;state4表示“發生事故”。
2.2.4 數據表busStateGo的設計
busStateGo表和busStateBack表的結構相同,各字段表示的意義也一樣,只不過是把“返程方向”改成“往程方向”而已,此處不再贅述。
2.2.5 數據表stationLocation的設計
數據表stationLocation的作用是存儲站點的百度地圖經緯度坐標,它的各字段說明如表4所示。有了此坐標表就能實現地址解析,將公交站名轉化成對應的地理坐標,進而實現在百度地圖上繪制公交線路的功能[5,6]。數據表stationLocation存儲了西安的所有公交站點,所以理論上所有公交線路都能解析成一個地理坐標鏈。
表4 數據表stationLocation各字段說明
2.3.1 系統總體運行流程圖
模擬服務器的總體運行流程圖如圖2所示。
圖2 模擬服務器的總體運行流程圖
如圖2所示,系統運行后,首先進入登錄頁面,提示用戶輸入用戶名和密碼。當用戶登錄的時候,為了增加安全性,使用MD5加密。系統把用戶輸入的密碼計算成MD5值,然后再去和保存在文件系統中的MD5值進行比較,進而確定輸入的密碼是否正確。通過這樣的步驟,系統在并不知道用戶密碼的明碼的情況下就可以確定用戶登錄系統的合法性。這不但可以避免用戶的密碼被具有系統管理員權限的用戶知道,而且還在一定程度上增加了密碼被破解的難度。如果輸入的用戶名和密碼與數據庫中儲存的用戶名和密碼相同,則登錄成功,進入系統主界面;否則,報錯并提示用戶重新登錄。登錄成功后,系統會開啟子線程來處理來自手機客戶端和模擬車輛終端的請求,管理員可以選擇“添加線路”、“刪除線路”以及“修改線路”等功能,分別執行不同的操作。
2.3.2 后臺子線程運行流程圖
系統后臺子線程的運行流程圖如圖3所示。
圖3 后臺子線程運行流程圖
從圖3可以看出,子線程開啟后,系統一直循環會檢測是否接到手機客戶端或模擬車輛終端發來的請求,若沒有接到,則繼續檢測;若接到請求,根據信息的類型進行不同處理。如果是模擬車輛終端上傳的路況信息,就更新數據庫中對應線路相應區間的交通狀況信息;如果是手機客戶端查詢信息,進一步判斷要查詢信息的類型,然后在數據庫中進行查找并返回查詢結果。
從上面的系統總體結構圖可以看出,模擬服務器是整個公交管理系統的核心,是將這個系統聯系在一起的中心節點。手機客戶端,模擬車輛終端都必須先與模擬服務器接線聯系才能實現與數據庫的交互。下面介紹一下,手機客戶端以及模擬車輛終端和模擬通信的格式,系統中所有通信格式說明見表5。
表5 通信格式說明
由表5可以看出:客戶端向模擬服務器發出的請求可以分為兩類,一類是查詢類請求,另一類是更新類請求。查詢類請求要求服務器返回客戶端所要查詢的內容,更新類請求只是通知服務器更新數據信息,不需要服務器返回任何內容。實際上客戶端和服務器通信的核心還是客戶端與數據庫的交互:即客戶端查詢數據庫中的信息,并更新數據庫中的信息。
本論文中的模擬車輛終端和手機客戶端均是基于Android平臺開發的應用程序。其中模擬車輛終端用來模擬運行中的公交車輛,在運行過程中能向服務中心發送當前位置信息和所在站間區間的交通擁堵狀況信息[78]。手機客戶端是向用戶發布的公交查詢軟件,通過該軟件用戶不僅可以清晰地看到所查詢線路上的交通狀況,還可以知道最近一輛公交車到達這里還有幾站路。用戶可以根據這些信息選擇乘車方案從而優化出行,提高公交效率。
模擬車輛終端包括“登錄界面”、“選擇線路”、“站點選擇”、“狀態發布”4個功能模塊。
手機客戶端包括“登錄界面”、 “線路和站點選擇”、“線路狀態發布”、“地圖顯示”4個功能模塊。
模擬車輛終端和手機客戶端運行流程圖分別如圖4和圖5所示。
用戶在使用模擬車輛終端向服務器上傳車輛信息時,先通過“選路選擇”和“選擇站點”選定車輛所在位置,然后選擇車輛運行方向和當前的交通狀況,點擊“發布”按鈕即可。
使用手機客戶端向服務器查詢車輛信息時,輸入要查詢公交車的線路、自己當前所在站點和目的地點信息,點擊“查詢”。手機客戶端接收服務器返回的數據后,在“地圖顯示”和“線路狀態顯示”頁面上顯示查詢的線路以及下輛公交車還有幾站到達,兩個界面之間可以通過滑屏操作進行切換。
3.3.1 模擬車輛終端運行效果圖
如圖6所示,子圖 (a)為模擬車輛終端“登錄界面”運行效果圖;子圖 (b)為模擬車輛終端“線路選擇”功能運行效果圖;子圖 (c)為模擬車輛終端“站點選擇”功能運行效果圖;子圖 (d)為模擬車輛終端“狀態發布”功能運行效果圖。
3.3.2 手機客戶端運行效果圖
如圖7所示,子圖 (a)為手機客戶端“登錄界面”運行效果圖;子圖 (b)為手機客戶端“線路和站點選擇”功能運行效果圖;子圖 (c)為手機客戶端“地圖顯示”功能運行效果圖;子圖 (d)為手機客戶端“線路狀態顯示”功能運行效果圖。
圖6 模擬車輛終端運行效果圖
圖7 手機客戶端運行效果圖
未來的交通必將向著智能化和方便人們生活的方向發展,優化的公交管理系統和便攜實用的交通查詢軟件成為交通水平提高的必然需求[9]。
交通管理系統也將會向高度智能化的方向發展,形成一個車輛、乘客和服務中心交互網絡[10]。屆時每輛公交車也將參與提供實時路況信息,乘客不僅能在客戶端查詢線路,還能獲取到每條線路上更多的動態信息,從而將交通的諸多要素聯動起來,優化乘客出行,提高公交效率,具有一定的推廣價值。
本文中設計的系統可以作為公交車輛、服務中心、用戶終端交互系統的雛形。如果能進一步研究和發展,結合現階段先進的公交管理技術,必將會使現在的公交管理水平達到一個新的更高的水平[11]。