文/趙亞棟 魏琦
隨著汽車(chē)電子、網(wǎng)絡(luò)、信息技術(shù)的快速發(fā)展,科技、智能、人性化已經(jīng)成為汽車(chē)人機(jī)交互的發(fā)展大勢(shì)。目前卡車(chē)車(chē)載導(dǎo)航普遍存在功能單一、地圖數(shù)據(jù)陳舊且更新不及時(shí)、路線規(guī)劃不合理無(wú)法滿足卡車(chē)實(shí)際需求等弊端,使得越來(lái)越多的卡車(chē)司機(jī)放棄使用車(chē)載導(dǎo)航。綜合上述問(wèn)題,本文通過(guò)不斷實(shí)踐嘗試,使用離線數(shù)據(jù)與在線數(shù)據(jù)相結(jié)合的方式,在Android平臺(tái)下實(shí)現(xiàn)了一個(gè)專(zhuān)為卡車(chē)打造的車(chē)載導(dǎo)航系統(tǒng),不但解決了原有卡車(chē)導(dǎo)航存在的問(wèn)題而且更好用、功能更豐富。
此系統(tǒng)包含12個(gè)大的功能模塊分別為巡航、路徑規(guī)劃、導(dǎo)航、歷史行程、目的地分類(lèi)和搜索、拖動(dòng)地圖選目的地、離線地圖下載、組隊(duì)、用戶反饋、用戶手冊(cè)、在線升級(jí)和加油提醒,如圖1所示。
2.2.1 路徑規(guī)劃模塊
用戶可在設(shè)置中設(shè)置車(chē)輛信息(長(zhǎng)寬高、車(chē)牌等),在路徑規(guī)劃頁(yè)面選擇路徑規(guī)劃策略(避免擁堵、避免限行等),在地圖上顯示規(guī)劃出的路徑,在路線上顯示沿途城市天氣也可對(duì)沿途加油站、衛(wèi)生間等進(jìn)行搜索并在路線上顯示。在地圖左側(cè)顯示每條路徑的預(yù)估長(zhǎng)度、紅綠燈個(gè)數(shù)等信息。
2.2.2 導(dǎo)航模塊
導(dǎo)航界面顯示距下個(gè)路口的距離、路口轉(zhuǎn)向圖標(biāo)、距離終點(diǎn)距離、預(yù)計(jì)到達(dá)時(shí)間以及重要路口的路口放大圖等信息,能夠查看路線全覽,在車(chē)頭向上和正北朝上間進(jìn)行切換,打開(kāi)和關(guān)閉實(shí)時(shí)路況。
2.2.3 我的行程模塊
主界面包含累計(jì)總里程和歷史行程列表。每一個(gè)記錄顯示導(dǎo)航開(kāi)始時(shí)間、起點(diǎn)和終點(diǎn)名稱(chēng)、行駛里程、用時(shí)、超速次數(shù)和超速詳情,在地圖上顯示行程路線并標(biāo)記超速點(diǎn)。
2.2.4 目的地查找和搜索模塊
擁有76種細(xì)分類(lèi)目的地如維修服務(wù)點(diǎn)、加油站等并可按距離篩選,直接選擇并點(diǎn)擊即可前往目的地。也可拖動(dòng)地圖選擇目的地或輸入關(guān)鍵詞搜索目的地并可將其設(shè)置為家或公司。
2.2.5 離線地圖模塊
各城市按省份將其分區(qū)顯示,顯示各城市離線地圖的大小和下載狀態(tài),可查看正在下載和已下載城市,可刪除。也可通過(guò)搜索關(guān)鍵字查詢(xún)對(duì)應(yīng)城市進(jìn)行下載。
2.2.6 組隊(duì)模塊
用戶可以創(chuàng)建隊(duì)伍和輸入口令加隊(duì)伍,都需要登錄后使用,未登錄狀態(tài)下會(huì)進(jìn)入登錄界面。創(chuàng)建隊(duì)伍成功后界面底層為地圖,地圖中顯示全隊(duì)的位置。地圖左側(cè)懸浮框顯示隊(duì)伍名稱(chēng),每個(gè)隊(duì)員的頭像,用戶名及身份。隊(duì)長(zhǎng)在該界面中可設(shè)置隊(duì)伍目的地、修改隊(duì)伍名稱(chēng)、修改昵稱(chēng)、移除隊(duì)員、解散隊(duì)伍等。
2.2.7 加油提醒模塊
在首頁(yè)監(jiān)控到油量不足后向用戶提示:油量不足是否前往最近加油站,用戶點(diǎn)擊確定直接規(guī)劃前往加油站的路徑。在導(dǎo)航頁(yè)面監(jiān)控到油量不足后向用戶提示:油量不足是否前往最近加油站,用戶點(diǎn)擊確認(rèn)按鈕即刻將相應(yīng)加油站作為途經(jīng)點(diǎn)并重新進(jìn)行路徑規(guī)劃開(kāi)始導(dǎo)航。
在Windows操作系統(tǒng)下,基于Android Studio平臺(tái),采用Java語(yǔ)言進(jìn)行客戶端開(kāi)發(fā),在PhpStorm平臺(tái)下進(jìn)行服務(wù)端開(kāi)發(fā),數(shù)據(jù)庫(kù)采用PostgreSQL。
工程中將RxJava及其RxAndroid、Rxpermissions等配套類(lèi)庫(kù)引入工程,進(jìn)行網(wǎng)絡(luò)請(qǐng)求,動(dòng)態(tài)權(quán)限申請(qǐng),解決生命周期等問(wèn)題。在消息傳遞方面使用廣播和EventBus。數(shù)據(jù)方面采用服務(wù)端和客戶端相結(jié)合的方式,用戶通過(guò)網(wǎng)絡(luò)請(qǐng)求與服務(wù)端交互獲取數(shù)據(jù)。顯示方面引入自適應(yīng)框架 "me.jessyan:autosize:1.1.1",在 AndroidManifest 中填寫(xiě)全局設(shè)計(jì)圖尺寸后,靜態(tài)布局即可使用自適應(yīng)框架進(jìn)行自適應(yīng)。原生界面布局文件采用Android基本布局的嵌套,并引入一些第三方控件實(shí)現(xiàn)一些復(fù)雜布局的顯示。用戶手冊(cè)功能和各種協(xié)議的界面通過(guò)編寫(xiě)具有自適應(yīng)功能的網(wǎng)頁(yè),再在客戶端采用Webview進(jìn)行加載。各模塊基本功能通過(guò)引入高德地圖sdk并編寫(xiě)邏輯代碼實(shí)現(xiàn)。
圖1:系統(tǒng)功能結(jié)構(gòu)
3.3.1 路徑規(guī)劃模塊
在路線規(guī)劃前設(shè)置搜索參數(shù), 分別為路線規(guī)劃的起終點(diǎn)、計(jì)算路徑的模式、途經(jīng)點(diǎn)和貨車(chē)信息。計(jì)算路徑的模式根據(jù)不走高速與高速優(yōu)先不能同時(shí)為true,高速優(yōu)先與避免收費(fèi)不能同時(shí)為true的規(guī)則,一共有九種模式。取數(shù)據(jù)庫(kù)中用戶設(shè)置的路線偏好作為算路模式,未設(shè)置時(shí)以“避免擁堵”作為默認(rèn)算路模式。
3.3.2 導(dǎo)航模塊
在導(dǎo)航相關(guān)的回調(diào)函數(shù)中獲取導(dǎo)航實(shí)時(shí)信息并對(duì)數(shù)據(jù)進(jìn)行處理在自定義布局上顯示,如在onNaviInfoUpdate() 導(dǎo)航引導(dǎo)信息回調(diào)中獲取距下個(gè)路口的距離,預(yù)計(jì)到達(dá)時(shí)間等信息進(jìn)行處理后在左上角顯示。在onServiceAreaUpdate()服務(wù)區(qū)信息回調(diào)中獲取前方服務(wù)區(qū)和收費(fèi)站的信息并在導(dǎo)航引導(dǎo)信息下方顯示。通過(guò)設(shè)置AMapNaviViewOptions的屬性設(shè)置自定義路線紋理和車(chē)標(biāo)等,增加個(gè)性化。
3.3.3 目的地查找和搜索模塊
通過(guò)編寫(xiě)配置文件PoiClassify.json將目的地按POI類(lèi)別進(jìn)行分類(lèi),通過(guò)讀取配置文件進(jìn)行布局的動(dòng)態(tài)顯示,每一小類(lèi)打開(kāi)后以當(dāng)前位置為中心進(jìn)行poi搜索,搜索結(jié)果按距離由進(jìn)到遠(yuǎn)分頁(yè)進(jìn)行顯示。
3.3.4 離線地圖模塊
通過(guò)下載管理器得到各個(gè)城市的下載狀態(tài)以及下載百分比初始化頁(yè)面顯示,退出系統(tǒng)時(shí)將正在下載和已下載的城市信息存入本地?cái)?shù)據(jù)庫(kù)中。在離線地圖初始化完成前進(jìn)入離線地圖模塊則根據(jù)數(shù)據(jù)庫(kù)中的正在下載和已下載信息初始化界面顯示。
3.3.5 組隊(duì)模塊
在工程中引入高德地圖獵鷹sdk。根據(jù)應(yīng)用的key新建一個(gè)獵鷹軌跡服務(wù)得到service id,一個(gè)service對(duì)應(yīng)一個(gè)軌跡管理系統(tǒng),通過(guò)一個(gè)service可管理多個(gè)終端設(shè)備。當(dāng)組建一個(gè)隊(duì)伍后給該隊(duì)伍分配一個(gè)唯一8位的隊(duì)伍號(hào),將隊(duì)伍信息存入隊(duì)伍信息表中,同時(shí)在service下創(chuàng)建該終端(使用AMapTrackClient.addTerminal添加終端到service下),并開(kāi)啟軌跡上報(bào)服務(wù)和定位采集。當(dāng)有隊(duì)員加入隊(duì)伍時(shí)將對(duì)應(yīng)終端加入service下并開(kāi)啟軌跡上報(bào)和定位采集,將隊(duì)員信息存入該隊(duì)伍對(duì)應(yīng)的隊(duì)員信息表中。
如圖2所示。
本系統(tǒng)不僅解決了傳統(tǒng)卡車(chē)導(dǎo)航存在的不足并且完全針對(duì)卡車(chē),根據(jù)當(dāng)前車(chē)輛的長(zhǎng)寬高、載重等條件,進(jìn)行定制化路徑規(guī)劃,避免車(chē)輛行駛到半途無(wú)法通過(guò)等情況。地圖數(shù)據(jù)采用離線數(shù)據(jù)結(jié)合在線數(shù)據(jù),針對(duì)地圖數(shù)據(jù)更新困難問(wèn)題,采用基礎(chǔ)圖層數(shù)據(jù)預(yù)裝,有數(shù)據(jù)更新時(shí)使用在線增量更新,節(jié)約流量。結(jié)合實(shí)時(shí)路況進(jìn)行路徑規(guī)劃,確保規(guī)劃路線的可通過(guò)性。目前物流市場(chǎng)以物流公司為主,車(chē)輛組隊(duì)功能滿足了車(chē)隊(duì)出行途中的統(tǒng)一調(diào)度需求,隊(duì)長(zhǎng)統(tǒng)一設(shè)置目的地,車(chē)隊(duì)成員共享實(shí)時(shí)位置,為結(jié)隊(duì)出行用戶提供便利。
圖2:系統(tǒng)主要功能界面