楊博雄, 黃 靜, 陳希同, 周佳鑫
(北京師范大學珠海分校 信息技術學院,珠海 519087)
當前很多學校的校園內部已經采用電瓶車等新能源汽車來作為公共的交通工具為教師和學生提供交通便利. 但是在某些時段,比如臨收班前或者高峰期,學生或者教師需要及時知道校園巴士(BUS)的剩余車次以及等待時間. 很顯然,很多學校并不能如城市中公交車上的實時監控系統那樣使用車載GPS/COMPASS監控系統來滿足這一需求. 因為對于學校內部公共交通這種應用場景,這樣的實施方案部署成本高,運營的費用也高,而且使用起來并不靈活和方便.
本文采用校園巴士的司機自身所攜帶的智能手機作為采集終端,通過手機APP采集司機的經緯度位置信息,以此作為該臺校園巴士的位置信息,利用移動互聯網將該位置信息傳遞給后臺. 后臺則借助于地圖服務器,根據不同司機手機所傳遞過來的位置信息以Web的方式呈現給用戶. 學生或者教師只需要掃描一個二維碼就可以鏈接到共享的服務平臺上,進而可以方便地得到校園巴士的實時運行軌跡和在軌運行車次.本系統直接使用司機的智能手機作為校園巴士的位置采集終端,省卻了購買專門的獲取巴士位置數據的智能終端設備的費用,同時可以利用學校的Wi-Fi網絡節省移動通信流量,具有成本低、部署快、使用方便、維護簡單等優點.
本系統主要分為3個部分,分別是采集端、服務器、服務端,如圖1所示.

圖1 系統模型
采集端主要是指校園巴士司機的智能手機,采集端的實現流程如圖2所示. 用戶在登錄界面輸入賬號密碼,驗證通過后先加載用戶所在位置的地圖,接著啟用手機定位功能,在經緯度信息后,把地理位置信息傳輸到云端服務器,服務器會處理信息并將位置信息存入數據庫,采集端則根據位置信息在電子地圖上把電瓶車實時位置標注出來,之后每隔5 s獲取一次位置信息并執行更新傳輸和標注操作.
當采集端以指定域名向服務器訪問接口,首先得進行域名解析,向域名服務器DNS詢問域名所對應的IP地址如果找到了就發送信號,若狀態碼為200則請求成功. 域名所在的服務器會根據請求的端口號將請求送到監聽該端口的服務器程序. 如果有對應程序,則將該位置坐標存儲在數據庫中.
當用戶打開服務端界面時,服務器就將用戶的請求以Web方式呈現,把所有電瓶車的當前所在位置完整地顯示在電子地圖上,如圖3所示.

圖2 采集端的流程圖

圖3 顯示端界面
校園巴士的位置信息獲取依賴于巴士司機所攜帶的智能手機,通過HTML5可以方便地獲取該手機的經緯度等位置信息[1].
在調用手機位置信息之前需要進行一些參數設置,如圖4所示.

圖4 獲取手機位置信息的參數設置
enableHighAccuracy是很關鍵的屬性,表示是否使用高精度定位,若選擇false,系統將無法調用GPS定位,而改用IP定位或者基站定位,其地理位置誤差可達200 m-500 m,嚴重影響使用,所以應該使用true,控制位置誤差在10 m以內.
showCircle屬性為false時,表明不顯示定位結果的范圍圓.
showMarker屬性為false時,因為本系統將使用自己設置的標記,所以不顯示原本的定位結果標記.
showButton屬性為false時,為不在地圖上一個點擊后可以顯示觸發定位的圖標,本系統不采用觸發方式,而使用定時自動觸發定位.
Timeout屬性為設置定位超時,本系統設置為5 s,當5 s還不能獲得當前位置時,將會返回定位失敗的狀態.
zoomToAccuracy屬性為設定系統定位成功后調整地圖視野范圍使定位位置及精度范圍在視野內可見[2].
在設置好定位的相關參數后即可通過getCurrentPosition定位函數接口實現定位技術,如圖5所示.

圖5 調用定位方法
Geolocation permission denied 提示用戶關閉了瀏覽器或者APP的定位權限或者沒打開手機的定位服務,或者當前頁面為非安全頁面,iOS10或者Chrome等會禁止非安全頁面的定位請求. 如果網頁所處的域名還不支持HTTPS應該盡快升級,安全頁面指的是支持HTTPS的Web站點,而且是通過https協議打開的頁面.
在完成這個函數后將會根據定位獲取的狀態值進行下一步操作,若定位失敗就會轉為城市定位,把地圖中心定在手機所在城市的中心,并且把Marker也定在此. 如果定位成功就會把地圖中心點和Marker定在精確的經緯度坐標上[3].
后臺的地圖服務采用的是高德地圖作為服務引擎,利用高德開放者平臺提供的API預先定義的函數接口接入,首先在網頁中引用高德地圖JavaScript API入口腳本[4]:
<script type=“text/javascript” src=‘https://webapi.amap.com/maps?v=1.3&plugin=AMap.Geolocation,Amap.ToolBar,Amap.Geocoder,Amap.PlaceSearch,Amap.Autocomplete,Amap.Driving&key=*****’></script>

圖6 創建地圖
再創建一個Marker,當定位信息出來后可以把Marker放置在電瓶車當前所在的位置,offset屬性為Marker放置的偏移量,Pixel (0,0)時marker左上角對準position的位置,Pixel(-10,-32)的時候,錨點對準position,如圖7所示.

圖7 創建Marker
本系統使用的是阿里云虛擬服務器[5,6],該服務器搭建方便且資費便宜,完全適合該系統的開發測試工作. 搭建服務器的過程如下:
(1)在阿里云上購買一臺虛擬云主機(Linux操作系統),如圖8所示.

圖8 虛擬云主機有關信息
(2)購買域名并進行云解析,如圖9所示.

圖9 域名云解析
(3)將整個項目代碼通過FTP工具上傳到云主機空間中(注意: 項目要上傳到htdocs目錄下).
(4)最后在云數據庫上創建一個表名為position的表,如圖10所示.采集端要將數據傳輸到該數據庫中,需要對連接

圖10 編輯數據庫列
數據庫參數的進行實現設置,如數據庫的連接地址、用戶名和密碼,然后調用PHP的mysql_connect()方法連接到遠程數據庫,接著使用mysql_select_db()方法對指定數據庫名字進行數據庫操作,如圖11所示.

圖11 遠程數據庫連接
(5)當采集端獲取到坐標信息后,會將該信息以GET請求的方式將相關參數傳送到服務器相應的接口[7],如:

服務器端會在獲取數據庫后把請求中的校園巴士的id、posx和posy等參數提取出,再對登錄信息進行比對,之前登陸成功后已經把用戶名即id存在session中,現在只需要比對請求中的id是否是session中存的值或者這個瀏覽器有沒有在服務器中儲存一個session,只要其中一個條件判斷不通過,就要求瀏覽器頁面跳轉到采集端的登錄頁面要求用戶進行登錄動作后才能操作請求后臺修改參數,如圖12所示.

圖12 獲取數據庫后對電瓶車坐標進行修改
完成云端服務器的系統搭建后就可以開始手機采集端的實驗了. 首先要在手機上安裝APP并進入登陸界面,如圖13所示.

圖13 登錄界面
完成登錄后即可進入電子地圖并開始定位(注意:手機必須打開定位功能,最好選擇使用GPS、WLAN和移動網絡的定位模式).
如圖14為地圖將采集端所采集的位置信息在地圖上顯示的結果,圖14(a)圖為采集端定位結果,圖14(b)為打開服務端用戶看到的效果,圓圈標注出的對象為左圖在服務端顯示的結果).
圖15是云數據庫的數據,有數據同步寫入云數據庫,說明數據傳輸是正常的.

圖14 地圖顯示結果

圖15 云數據庫
完成以上環境搭建后,拿著一部安裝好軟件的手機,坐上一輛移動的車后進行數據采集. 測試結果如圖16所示. 隨著校園巴士車的移動,顯示在地圖上的車輛標識也是跟隨著移動的,且移動中車輛標識始終保持在道路上.
由于本系統在使用的過程中在沒有Wi-Fi熱點的時候,需要消耗手機流量,這樣會產生較高的運行費用.考慮到電瓶車的行駛速度,這個系統設定了自動刷新的時間是在5秒,從實際情況來看,若一個學生打開了APP,觀察6~7分鐘的話,耗費流量將達到1M,這樣的數據耗費顯然不是一個理想的設計模型. 因此本系統通過AJAX(Asynchronous Javascript And XML)技術[8,9]優化了加載校園巴士坐標的顯示方法,如圖17所示.

圖16 動態測試

圖17 采用AJAX后的位置獲取方法
通過優化前與優化后的數據加載比對(數據是以20輛電瓶車作為參考),表1是優化前的數據加載及耗費時長,表2優化后的數據加載及耗費時長.
通過優化后,學生在校園打開APP就不用擔心流量消耗太大而導致該系統使用人數的減少,這樣的優化不僅從數據上節省了許多,而且在視覺效果上也提高了用戶體驗.

表1 優化前的數據加載及時長

表2 優化后的數據加載及時長
本文介紹了一種利用校園巴士司機所攜帶的智能手機獲取的位置信息作為該司機所運行的巴士車的位置信息,利用高德地圖作為地圖服務器,并采用阿里云空間來部署數據庫服務和Web服務. 本系統直接使用Web APP的顯示端,因此無論是安卓手機還是蘋果手機都可以得到統一的顯示界面,無需因為手機操作系統的不同而開發兩套APP程序[10].
由于考慮到開發成本和運營成本,本系統所采用的平臺只適用于小規模的應用,比如校園BUS最好不要超過100臺,同時訪問的終端不要超過5000個,因此本系統只適用于校園巴士實時位置共享的這種小眾應用場景.
1代敏. 基于Android平臺下手機定位程序的設計及實現. 計算機與數字工程,2012,40(4): 143-145.
2朱國藝,周玉珍. HTML5中地理位置定位技術的應用與探究. 電子技術與軟件工程,2017,(3): 26-27.
3彭紅. 基于云計算的LBS應用研究. 軟件工程,2016,19(10):27-29,26. [doi: 10.3969/j.issn.1008-0775. 2016.10.007]
4邢偉寅. 基于高德地圖的高校校園信息查詢系統的設計與實現. 信息與電腦,2015,(18): 76-77. [doi: 10.3969/j.issn.1003-9767.2015.18.035]
5沈榮明,楊照生. 基于阿里云的“我家菜單”系統研究. 電子技術與軟件工程,2015,(22): 71,91.
6石高濤,王伯遠,吳斌. 基于WiFi與移動智能終端的室內定位方法綜述. 計算機工程,2015,41(9): 39-44,50.
7齊紅心. PHP開發過程中頁面參數傳遞方法分析. 軟件導刊,2016,15(1): 6-9.
8孫光明,王碩. 基于JSON的Ajax數據通信快速算法. 計算機應用與軟件,2015,32(1): 263-266.
9龔成瑩,邢敬宏,胡銀保. 基于JSON的Android移動終端與PHP及MySQL數據通信. 工業儀表與自動化裝置,2013,(1): 63-65.
10王鑫. Native App與Web App移動應用發展. 計算機系統應用,2016,25(9): 250-253. [doi: 10.15888j.cnki.csa.0054 29]