潘志宏,萬(wàn)智萍,謝海明
1.中山大學(xué) 新華學(xué)院,廣州 510520
2.廣東移動(dòng)通信有限責(zé)任公司 茂名分公司,廣東 茂名 525000
近年來(lái),隨著物聯(lián)網(wǎng)與移動(dòng)互聯(lián)網(wǎng)技術(shù)快速發(fā)展,國(guó)家不斷推進(jìn)智慧城市建設(shè),其中城市交通是智慧城市重點(diǎn)解決的問(wèn)題之一。伴隨車(chē)聯(lián)網(wǎng)、智慧公交、共享單車(chē)不斷的深入應(yīng)用,如何利用現(xiàn)有的物聯(lián)網(wǎng)、移動(dòng)互聯(lián)網(wǎng)、大數(shù)據(jù)等技術(shù)來(lái)提升城市交通效率,實(shí)現(xiàn)智慧交通是目前國(guó)內(nèi)外研究的熱點(diǎn)[1-5]。公交系統(tǒng)作為城市交通的重要組成部分,出現(xiàn)了針對(duì)智慧公交APP,比如車(chē)來(lái)了、掌上公交等,它們通過(guò)與政府交通部門(mén)合作,授權(quán)獲取城市公交車(chē)的實(shí)時(shí)位置信息,從而給用戶(hù)提供上車(chē)前查詢(xún)的服務(wù),和上車(chē)后的智能提醒服務(wù)。這種方案通過(guò)安裝在公交車(chē)的特定傳感器進(jìn)行實(shí)時(shí)數(shù)據(jù)收集,并將數(shù)據(jù)存儲(chǔ)于政府交通部門(mén)的云服務(wù)器,這部分?jǐn)?shù)據(jù)非常精確,但是出于城市安全問(wèn)題考慮,這部分?jǐn)?shù)據(jù)并不會(huì)對(duì)外開(kāi)放,必須是有資質(zhì)的公司通過(guò)與政府合作才能獲取數(shù)據(jù),另外它也具有一定的局限性,比如當(dāng)部分公交車(chē)實(shí)時(shí)數(shù)據(jù)采集和回傳出現(xiàn)異常時(shí),APP會(huì)因?yàn)閿?shù)據(jù)的異常導(dǎo)致相應(yīng)服務(wù)中斷,產(chǎn)生不好的用戶(hù)體驗(yàn),例如會(huì)因?yàn)橛脩?hù)所乘坐的公交車(chē)實(shí)時(shí)數(shù)據(jù)產(chǎn)生異常,使用戶(hù)無(wú)法得到實(shí)時(shí)的報(bào)站信息,甚至因此錯(cuò)過(guò)下車(chē)站點(diǎn)。為了解決數(shù)據(jù)缺失問(wèn)題,近年來(lái)很多學(xué)者利用智能終端的移動(dòng)感知能力來(lái)解決城市交通問(wèn)題,比如Farkas等人[4]提出基于移動(dòng)群智感知的城市公交信息服務(wù)平臺(tái),通過(guò)乘客移動(dòng)終端感知數(shù)據(jù)與公交站點(diǎn)事件檢測(cè)器監(jiān)控相融合的方法來(lái)獲得公交車(chē)的實(shí)時(shí)信息。Manali等人[5]提出基于參與式感知技術(shù)利用乘客智能終端收集公交車(chē)的實(shí)時(shí)軌跡,最終給用戶(hù)提供公交車(chē)到站信息。Srinivasan等人[7]通過(guò)收集手機(jī)GPS軌跡數(shù)據(jù)從而獲得城市公交車(chē)站點(diǎn)信息。
為了解決上述城市公交實(shí)時(shí)數(shù)據(jù)缺失問(wèn)題,本文提出了利用開(kāi)源的公交線(xiàn)路信息與移動(dòng)終端的感知數(shù)據(jù)相互融合的解決方案[5-9],方案實(shí)現(xiàn)在沒(méi)有獲得交通部門(mén)實(shí)時(shí)數(shù)據(jù)的情況下,給用戶(hù)提供上車(chē)后智能提醒服務(wù),包含實(shí)時(shí)報(bào)站與到站提醒功能。本文的貢獻(xiàn)在于,首先提出基于Haversine[10-11]的最近站點(diǎn)自動(dòng)生成算法和基于心跳包機(jī)制的站點(diǎn)實(shí)時(shí)監(jiān)測(cè)與到站提醒算法;其次通過(guò)優(yōu)化距離計(jì)算公式方法來(lái)降低空間距離計(jì)算時(shí)間復(fù)雜度,從而提升算法的性能;最后利用移動(dòng)跨平臺(tái)框架[12-15]APPCan實(shí)現(xiàn)智慧公交APP,它很好地兼容Android、iOS等多種移動(dòng)操作系統(tǒng),并具有實(shí)時(shí)報(bào)站、到站提醒、公交線(xiàn)路查詢(xún)、最近上車(chē)站點(diǎn)自動(dòng)生成等功能。
公交系統(tǒng)作為目前城市出行的重要組成部分,如何給市民乘坐公交系統(tǒng)出行提供智慧服務(wù),是目前實(shí)現(xiàn)智慧出行重要的一步。本文主要針對(duì)智慧公交中的實(shí)時(shí)報(bào)站與到站提醒功能設(shè)計(jì)一款A(yù)PP,解決用戶(hù)在公共汽車(chē)上因?yàn)閷?zhuān)注于其他事情而引起誤站的問(wèn)題,又或者到陌生地方乘坐公交系統(tǒng)因?yàn)閷?duì)站點(diǎn)不熟悉而錯(cuò)站的問(wèn)題。主要包括查詢(xún)站點(diǎn)、實(shí)時(shí)報(bào)站、到站提醒等功能。圖1給出了系統(tǒng)的功能流程圖。
功能描述如下:(1)查詢(xún)路線(xiàn)站點(diǎn),用戶(hù)輸入路線(xiàn)并點(diǎn)擊確認(rèn)后會(huì)在下方呈現(xiàn)該路線(xiàn)的所有站點(diǎn)的列表,并提示用戶(hù)點(diǎn)擊選擇目的地;(2)自動(dòng)生成最近的站點(diǎn),用戶(hù)在點(diǎn)擊選擇目的地站點(diǎn)后,系統(tǒng)會(huì)根據(jù)Haversine最近站點(diǎn)自動(dòng)生成算法生成用戶(hù)上車(chē)的最佳站點(diǎn);(3)手動(dòng)選擇上車(chē)站點(diǎn),如果系統(tǒng)自動(dòng)生成的站點(diǎn)不準(zhǔn)確,用戶(hù)可手動(dòng)更改上車(chē)站點(diǎn);(4)實(shí)時(shí)報(bào)站,用戶(hù)在確認(rèn)了基本乘車(chē)信息,包括公交路線(xiàn)、目標(biāo)站點(diǎn)和上車(chē)站點(diǎn)之后開(kāi)始實(shí)時(shí)報(bào)站,系統(tǒng)會(huì)根據(jù)心跳包機(jī)制的站點(diǎn)實(shí)時(shí)監(jiān)測(cè)算法檢測(cè)公交車(chē)是否到站,并自動(dòng)刷新頁(yè)面對(duì)用戶(hù)反饋;(5)到站提醒,當(dāng)用戶(hù)距離目標(biāo)站點(diǎn)還剩3個(gè)站的時(shí)候,每到一個(gè)站,手機(jī)會(huì)震動(dòng)進(jìn)行提醒。在用戶(hù)到達(dá)最后一站時(shí)會(huì)響鈴提醒。
圖1 系統(tǒng)功能流程圖
獲取用戶(hù)輸入的公交路線(xiàn),將其作為參數(shù)添加至API請(qǐng)求鏈接中,然后向第三方數(shù)據(jù)平臺(tái)聚合數(shù)據(jù)的路線(xiàn)信息API進(jìn)行請(qǐng)求。數(shù)據(jù)平臺(tái)將公交路線(xiàn)的數(shù)據(jù)返回給移動(dòng)終端,移動(dòng)終端將公交路線(xiàn)的站點(diǎn)信息進(jìn)行存放,同時(shí)將所有站點(diǎn)以列表的形式進(jìn)行顯示。
當(dāng)用戶(hù)選擇公交路線(xiàn)后,移動(dòng)終端能夠根據(jù)算法自動(dòng)生成搭車(chē)的最佳站點(diǎn)。首先通過(guò)移動(dòng)終端GPS獲取用戶(hù)所在位置,然后將其與整個(gè)路線(xiàn)的所有站點(diǎn)進(jìn)行對(duì)比距離,最后輸出距離用戶(hù)最近的站點(diǎn)。根據(jù)Haversine公式[10-11]可得到如下公式:
其中hav函數(shù)滿(mǎn)足如下條件:
最終根據(jù)公式(1)跟(2)求得兩點(diǎn)的距離為:
公式(1)跟(3)中的lat表示緯度,lng表示經(jīng)度,也即是(lat2,lng2)和(lat1,lng1)表示兩個(gè)坐標(biāo)點(diǎn) L2和 L1的經(jīng)緯度,r為地球半徑。這里需要注意的是在編程實(shí)現(xiàn)的時(shí)候,必須把三角函數(shù)的參數(shù)轉(zhuǎn)換為弧度,也即是參數(shù)需要乘上PI/180。
算法1基于Haversine的最近站點(diǎn)自動(dòng)生成算法
1.Initialize:獲取用戶(hù)的位置,緯度為latu,經(jīng)度為lngu,獲取整條路線(xiàn)所有站點(diǎn)的經(jīng)緯度,構(gòu)成站點(diǎn)列表L={L1(lat1,lng1]),L2(lat2,lng2),…,Ln(latn,lngn)},創(chuàng)建數(shù)組ArrayD用來(lái)存放用戶(hù)與所有站點(diǎn)之間的距離。
2.for each Liin L
3. 利用公式(3)計(jì)算用戶(hù)當(dāng)前位置與列表L中每個(gè)節(jié)點(diǎn)的距離di。
4. 將di存入數(shù)組ArrayD
5.end for
6.對(duì)數(shù)組ArrayD進(jìn)行升序排列
7.獲取ArrayD最小值dimin,并將最小值對(duì)應(yīng)的Li站點(diǎn)進(jìn)行返回。
因?yàn)榭紤]到城市實(shí)際的道路復(fù)雜情況,有時(shí)候地理位置最近的站點(diǎn)不一定是步行最佳的站點(diǎn),所以在智慧公交APP中增加手動(dòng)選擇上車(chē)站點(diǎn)功能。該功能在確認(rèn)乘車(chē)信息的界面中增加“手動(dòng)選擇上車(chē)站點(diǎn)”選擇列表,把該路線(xiàn)的所有站點(diǎn)作為列表選項(xiàng),用戶(hù)可以選擇站點(diǎn)來(lái)替換系統(tǒng)自動(dòng)生成的最近站點(diǎn)。
目前市面上智慧公交APP基本都是通過(guò)獲取政府交通部門(mén)的授權(quán),獲取公交車(chē)的實(shí)時(shí)位置信息來(lái)提供實(shí)時(shí)報(bào)站和到站提醒服務(wù),本文研究的是通過(guò)用戶(hù)移動(dòng)終端感知數(shù)據(jù)與免費(fèi)開(kāi)源交通數(shù)據(jù)的融合,從而獲取用戶(hù)所在公交車(chē)的位置與站點(diǎn)之間的關(guān)系,來(lái)給用戶(hù)提供實(shí)時(shí)報(bào)站與到站提醒服務(wù)[5-9]。該功能使用“心跳包”機(jī)制來(lái)實(shí)現(xiàn)即時(shí)監(jiān)測(cè),即在時(shí)間間隔內(nèi)反復(fù)執(zhí)行心跳包函數(shù),心跳包函數(shù)主要完成當(dāng)前公交車(chē)所到站點(diǎn)的檢測(cè)和是否到達(dá)目的站點(diǎn)的判斷。其中所到站點(diǎn)實(shí)時(shí)監(jiān)測(cè)主要是通過(guò)計(jì)算當(dāng)前公交車(chē)與下一站之間的實(shí)時(shí)距離,當(dāng)距離小于閥值是判定車(chē)輛到站,然后自動(dòng)刷新一次頁(yè)面反饋信息。而到站提醒功能是在站點(diǎn)實(shí)時(shí)監(jiān)測(cè)的基本上,通過(guò)當(dāng)前所到站點(diǎn)與目的站點(diǎn)之間的距離和站點(diǎn)數(shù)來(lái)進(jìn)行判定是否到站或者是否需要啟動(dòng)提醒,當(dāng)心跳包檢測(cè)所剩站點(diǎn)數(shù)目小于等于3時(shí),每到一站就震動(dòng)受,到達(dá)最后一站時(shí)改為響鈴。
因?yàn)樾奶扛? s就會(huì)發(fā)出請(qǐng)求一次,假設(shè)一次車(chē)程需要1 h,需要經(jīng)過(guò)20個(gè)站點(diǎn),根據(jù)算法2可知至少需要執(zhí)行1 820次距離計(jì)算。在算法1中,只需要調(diào)用幾十次(線(xiàn)路所有站點(diǎn)個(gè)數(shù))距離計(jì)算就實(shí)現(xiàn)功能,所以距離計(jì)算公式(3)完全能滿(mǎn)足算法1的性能需求。但是由于執(zhí)行公式(3)中的三角函數(shù)會(huì)消耗很多移動(dòng)終端的計(jì)算資源,特別是距離計(jì)算次數(shù)達(dá)到幾千次級(jí)別時(shí),APP性能會(huì)下降非常多,所以必須對(duì)距離計(jì)算公式(3)進(jìn)行優(yōu)化,讓它滿(mǎn)足算法2背景下的距離計(jì)算。
APP應(yīng)用場(chǎng)景一般是限定在一個(gè)城市的范圍內(nèi)進(jìn)行,也即是兩個(gè)站點(diǎn)間的距離不會(huì)超過(guò)200 km。由于范圍小,可以近似認(rèn)為經(jīng)線(xiàn)和所緯線(xiàn)是垂直的,假設(shè)如圖2示,要求計(jì)算 X(113.4,23.10)和Y(113.5,23.20)兩點(diǎn)的距離,可以先求出南北方向距離LY,然后求出東西方向距離LX,最后求矩形對(duì)角線(xiàn)距離,即
圖2 經(jīng)緯度近似垂直情況下兩點(diǎn)間距離的計(jì)算
其中 toRadians(θ)=θ×PI/180 (7)
根據(jù)公式(4)、(5)、(6)、(7)最終得出:
下面主要從兩個(gè)方面來(lái)驗(yàn)證本文優(yōu)化方案:第一是可靠性,主要驗(yàn)證優(yōu)化后的公式是否能滿(mǎn)足實(shí)際的需求;第二是高效性,主要是驗(yàn)證是否能減少手機(jī)的計(jì)算資源,提升性能。
因?yàn)樵谒惴?中,有兩處需要用到距離計(jì)算:一個(gè)是計(jì)算當(dāng)前位置與下一個(gè)站點(diǎn)的距離,一般兩個(gè)相鄰的公交車(chē)站的距離在2 km以?xún)?nèi);另外一個(gè)是計(jì)算當(dāng)前位置與目的站點(diǎn)的距離,兩個(gè)站點(diǎn)是在一個(gè)城市內(nèi),所以一般距離不會(huì)超過(guò)200 km。在這兩種情況下,因?yàn)榫嚯x較小,可以近似認(rèn)為經(jīng)線(xiàn)跟緯線(xiàn)是垂直的,所以采用優(yōu)化后的距離計(jì)算公式(8)來(lái)計(jì)算距離。通過(guò)前面分析可知Haversine距離計(jì)算公式(3)算出來(lái)的距離是最準(zhǔn)確的,在表1中通過(guò)設(shè)置幾對(duì)不同數(shù)量級(jí)別距離的測(cè)試點(diǎn)來(lái)驗(yàn)證通過(guò)優(yōu)化后的距離計(jì)算公式(8)與Haversine距離計(jì)算公式(3)兩種方法計(jì)算出來(lái)的誤差。從表1的測(cè)試結(jié)果分析得出,公式(8)在幾千米的距離內(nèi)誤差為0;在幾萬(wàn)米的范圍內(nèi),誤差為10 cm左右;在290 km左右的距離,誤差僅為10 m左右,完全滿(mǎn)足APP精度的需求。因此,可以得出優(yōu)化后的公式(8)可靠性是滿(mǎn)足算法2的需求。
前面驗(yàn)證公式的可靠性,它能很好地滿(mǎn)足對(duì)距離計(jì)算的要求。下面驗(yàn)證優(yōu)化后公式的高效性。三角函數(shù)的計(jì)算是一種運(yùn)算量比較大,占用時(shí)間比較長(zhǎng)的運(yùn)算,所以通過(guò)采用減少三角函數(shù)計(jì)算次數(shù)的方式來(lái)降低運(yùn)算時(shí)間。通過(guò)比較公式(8)與公式(3),可以清楚看到公式(3)要進(jìn)行5次三角函數(shù)的計(jì)算,而公式(8)只需要進(jìn)行1次的三角函數(shù)計(jì)算。假設(shè)在算法2中,要進(jìn)行2 000次的距離計(jì)算。通過(guò)優(yōu)化,從原來(lái)需要進(jìn)行10 000次三角函數(shù)運(yùn)算降低到2 000次,減少了80%的計(jì)算資源,大大降低了手機(jī)的計(jì)算時(shí)間,對(duì)于實(shí)時(shí)性要求高的手機(jī)應(yīng)用來(lái)說(shuō)是至關(guān)重要的。為了驗(yàn)證優(yōu)化后的效果,在處理器為8核,運(yùn)行內(nèi)存為3 GB,操作系統(tǒng)為Android4.4.2的華為榮耀6手機(jī)測(cè)試,在單線(xiàn)程環(huán)境下執(zhí)行1千次、5千次、1萬(wàn)次、5萬(wàn)次、10萬(wàn)次距離計(jì)算公式,計(jì)算出每種狀態(tài)下的耗時(shí)情況,如圖3所示。通過(guò)耗時(shí)曲線(xiàn)圖可以得到,在執(zhí)行同樣次數(shù)的距離公式,優(yōu)化后的距離計(jì)算公式耗時(shí)大概是Haversine距離計(jì)算公式的1/7,大大提升了計(jì)算效率,因此提高了算法的性能。
表1 優(yōu)化后距離計(jì)算公式(8)與Haversine距離計(jì)算公式(3)可靠性驗(yàn)證
圖3 Haversine公式與優(yōu)化后公式耗時(shí)對(duì)比情況
通過(guò)上面數(shù)據(jù)驗(yàn)證,優(yōu)化后的距離計(jì)算公式一方面既滿(mǎn)足距離計(jì)算機(jī)精確度,也因?yàn)闇p少了大量反三角函數(shù)的計(jì)算量從而提高了計(jì)算效率,提升了算法的性能,滿(mǎn)足APP的實(shí)際需求。接下來(lái)是利用優(yōu)化后的距離計(jì)算公式(8)設(shè)計(jì)基于心跳包機(jī)制的站點(diǎn)實(shí)時(shí)監(jiān)測(cè)與到站提醒算法。算法具體步驟如下:
算法2基于心跳包機(jī)制的站點(diǎn)實(shí)時(shí)監(jiān)測(cè)與到站提醒算法
1.初始化:將算法1生成的最近站點(diǎn)與所選目的站點(diǎn)之間的站點(diǎn)數(shù)量設(shè)定為變量n,設(shè)置常量dconstant用來(lái)判定是否到站。Tlast_health為上次收到心跳包時(shí)間,Tcurrent為當(dāng)前時(shí)間,Ttimeout為設(shè)定的超時(shí)時(shí)間。
2.if((Tcurrent-Tlast_health<=Ttimeout)
//判斷心跳包是否超時(shí),如果不超時(shí)執(zhí)行如下操作
3.通過(guò)GPS獲取當(dāng)前用戶(hù)的位置Lu(latnow,lngnow)
4.從位置列表獲取當(dāng)前時(shí)刻下一個(gè)站點(diǎn)位置Lnext
5. 通過(guò)公式(8)計(jì)算當(dāng)前位置Lu與下一站點(diǎn)Lnext之間的距離dnext
6.if(dnext<=dconstant)
7.n-- //距離目的地站點(diǎn)個(gè)數(shù)減1
8.更新下一個(gè)站點(diǎn)位置,重置Lnext
9.通過(guò)公式(8)計(jì)算當(dāng)前站點(diǎn)與目的地的距離并在界面顯示。
10.if(n<=3)
11.啟動(dòng)到站提醒
12.end if
13.end if
14.end if
通過(guò)聚合數(shù)據(jù)API[16]中的全國(guó)公交及路徑規(guī)劃查詢(xún)接口獲取指定公交路線(xiàn)的所有站點(diǎn)的信息,包括對(duì)應(yīng)線(xiàn)路所有途徑站點(diǎn)名字、站點(diǎn)序號(hào)、站點(diǎn)經(jīng)緯度等信息。全國(guó)公交及路徑規(guī)劃查詢(xún)接口的地址為:http://op.juhe.cn/189/bus/busline,支持的格式為json/xml,當(dāng)需要獲取對(duì)應(yīng)公交線(xiàn)路的所以站點(diǎn)信息時(shí),只需要傳入key、city、bus三個(gè)參數(shù)值,分別對(duì)應(yīng)授權(quán)密鑰、城市、公交路線(xiàn)。請(qǐng)求格式如:http://op.juhe.cn/189/bus/busline?key=xx&city=yy&bus=zz(其中xx、yy、zz代表對(duì)應(yīng)參數(shù)值)。將獲取到的線(xiàn)路站點(diǎn)信息進(jìn)行存儲(chǔ),提供給線(xiàn)路查詢(xún)、最近站點(diǎn)生成、站點(diǎn)監(jiān)測(cè)、到站提醒使用。如圖4就是在線(xiàn)路查詢(xún)中得到的線(xiàn)路的所有站點(diǎn)。
圖4 搜索路線(xiàn)以及站點(diǎn)
為了提升開(kāi)發(fā)效率,能同時(shí)開(kāi)發(fā)Android與iOS平臺(tái)的應(yīng)用,考慮采用移動(dòng)跨平臺(tái)開(kāi)發(fā)技術(shù),目前主流的跨平臺(tái)開(kāi)發(fā)技術(shù)有React Native、ionic、APPCan[12-15]。其中APPCan是國(guó)內(nèi)知名的跨平臺(tái)移動(dòng)應(yīng)用開(kāi)發(fā)工具,利用HTML5技術(shù)快速開(kāi)發(fā)出Android、iOS平臺(tái)上的移動(dòng)應(yīng)用,它分為5個(gè)層次。最底層是移動(dòng)操作平臺(tái),目前支持iOS和Android。第4層是封裝好的各種通用組件庫(kù),主要有統(tǒng)計(jì)分析、消息推送、網(wǎng)絡(luò)管理等。第3層是管理層,主要包括應(yīng)用管理、插件的統(tǒng)一管理注冊(cè)以及相關(guān)的插件組件模塊。第2層是Window manager,它負(fù)責(zé)網(wǎng)頁(yè)面界面渲染和實(shí)現(xiàn)原生插件的調(diào)用。第1層是開(kāi)發(fā)者使用HTML5來(lái)實(shí)現(xiàn)應(yīng)用開(kāi)發(fā)[12]。
首先利用APPCan的uexLocation來(lái)進(jìn)行定位[12],它能同時(shí)使用GPS、GPRS、WIFI三種方式聯(lián)合定位,取最先返回值。首先利用uexLocation的openLocation()方法打開(kāi)定位功能,返回當(dāng)前移動(dòng)設(shè)備所在地經(jīng)緯度信息,同時(shí)可以利用onChange()方法來(lái)監(jiān)聽(tīng)移動(dòng)設(shè)備位置變化。前面已經(jīng)實(shí)現(xiàn)通過(guò)第三方數(shù)據(jù)平臺(tái)獲取公交線(xiàn)路所有站點(diǎn)信息。在自動(dòng)站點(diǎn)生成功能的實(shí)現(xiàn)中,可以將剛剛獲取的當(dāng)前移動(dòng)設(shè)備的經(jīng)緯度信息與公交線(xiàn)路的站點(diǎn)信息作為輸入,利用基于Haversine的最近站點(diǎn)自動(dòng)生成算法自動(dòng)計(jì)算出最優(yōu)的上車(chē)站點(diǎn),并反饋到頁(yè)面進(jìn)行顯示,如圖5所示。
圖5 自動(dòng)生成最近站點(diǎn)
站點(diǎn)實(shí)時(shí)監(jiān)測(cè)與報(bào)站,主要是通過(guò)前面所設(shè)計(jì)算法2來(lái)實(shí)現(xiàn),通過(guò)不斷監(jiān)測(cè)當(dāng)前位置與下一站點(diǎn)之間的距離,從而給用戶(hù)呈現(xiàn)與下一站點(diǎn)的距離、與目的地的距離、距離目的地站數(shù)等信息,實(shí)現(xiàn)效果如圖6所示。
圖6 實(shí)時(shí)報(bào)站
到站提醒功能是當(dāng)算法2檢測(cè)所剩站點(diǎn)數(shù)目小于等于3時(shí),每到一站就震動(dòng)受,到達(dá)最后一站時(shí)改為響鈴。震動(dòng)和響鈴可通過(guò)AppCan內(nèi)置框架對(duì)手機(jī)硬件設(shè)備調(diào)用[12]。其中震動(dòng)功能可以通過(guò)uexDevice的vibrate(milliseconds)方法來(lái)啟動(dòng)移動(dòng)設(shè)備的震動(dòng),cancelVibrate()方法來(lái)關(guān)閉設(shè)備震動(dòng)。響鈴功能通過(guò)調(diào)用uex-Audio來(lái)進(jìn)行音頻文件的播放與停止,首先通過(guò)uexAudio.open(url)打開(kāi)鈴聲或者歌曲鏈接,通過(guò)uexAudio.play(repeats)啟動(dòng)播放,通過(guò)uexAudio.stop()停止播放。
為了解決在沒(méi)有城市實(shí)時(shí)公交車(chē)數(shù)據(jù)的情況下實(shí)現(xiàn)智慧公交提醒服務(wù),本文提出利用開(kāi)源的公交線(xiàn)路信息與移動(dòng)終端的感知數(shù)據(jù)融合的解決方案,并在這個(gè)方案基礎(chǔ)上設(shè)計(jì)最近站點(diǎn)自動(dòng)生成算法、實(shí)時(shí)監(jiān)測(cè)與到站提醒算法;接著通過(guò)優(yōu)化距離計(jì)算公式提升計(jì)算時(shí)間復(fù)雜度,從而提升算法的性能;最后利用移動(dòng)跨平臺(tái)框架APPCan實(shí)現(xiàn)智慧公交APP,通過(guò)測(cè)試驗(yàn)證表明其能很好地滿(mǎn)足用戶(hù)智慧公交提醒的需求。