陸奕帆,郭曉金,陳 沉,簡(jiǎn)超峰
(重慶郵電大學(xué) 信號(hào)與信息處理重慶市重點(diǎn)實(shí)驗(yàn)室,重慶 400065)
隨著近年來旅游業(yè)的飛速發(fā)展,越來越多的戶外活動(dòng)得到了人們的關(guān)注。我國(guó)擁有龐大的旅游市場(chǎng),私家車出游也將達(dá)到小高峰,一大批私家車服務(wù)設(shè)施如汽車旅館、汽車營(yíng)地、加油維修站點(diǎn)等的建立將會(huì)帶動(dòng)國(guó)內(nèi)自駕游出行人數(shù)的增長(zhǎng)。隨著旅游業(yè)的蒸蒸日上,大量企業(yè)和資金的介入共同加速了旅游文化的發(fā)展,而露營(yíng)地的建設(shè)也將成為旅游地的新亮點(diǎn)[1]。
智慧旅游作為智慧城市的外延,利用通信與信息技術(shù)提升客戶體驗(yàn),保障了行業(yè)信息一體化的管理,刺激旅游產(chǎn)業(yè)的快速發(fā)展。使用云計(jì)算、物聯(lián)網(wǎng)、下一代網(wǎng)絡(luò)等新技術(shù),借助終端通過互聯(lián)網(wǎng)或移動(dòng)網(wǎng)絡(luò)主動(dòng)獲取旅游資源,實(shí)現(xiàn)服務(wù)于大眾的全新旅游模式。本文設(shè)計(jì)了基于Android系統(tǒng)的露營(yíng)地信息軟件系統(tǒng)。傳統(tǒng)的信息系統(tǒng)數(shù)據(jù)庫在設(shè)計(jì)之初采用Android內(nèi)嵌Sqlite數(shù)據(jù)庫,由于屬于應(yīng)用程序的一部分,占用Android客戶手機(jī)內(nèi)存空間。而本露營(yíng)信息系統(tǒng)基于傳統(tǒng)系統(tǒng)的基礎(chǔ)上,將所需的露營(yíng)信息數(shù)據(jù)庫放置在網(wǎng)絡(luò)數(shù)據(jù)庫服務(wù)端,采用Web Service技術(shù)[2]實(shí)現(xiàn)網(wǎng)絡(luò)傳輸數(shù)據(jù),利用網(wǎng)絡(luò)流媒體數(shù)據(jù)傳輸視頻,結(jié)合智慧旅游概念,提升使用者的服務(wù)體驗(yàn)。
露營(yíng)信息系統(tǒng)的主題設(shè)計(jì)思路是Android操縱端能夠通過實(shí)際需要進(jìn)行露營(yíng)地推薦、露營(yíng)地的篩選、獲得指定露營(yíng)地的圖片、露營(yíng)地介紹、預(yù)定電話以及地理地圖的顯示。
該系統(tǒng)采用C/S體系結(jié)構(gòu)如圖1所示,將應(yīng)用程序分為數(shù)據(jù)庫服務(wù)器和客戶端應(yīng)用程序兩個(gè)部分。數(shù)據(jù)庫服務(wù)器一旦被啟動(dòng)就隨時(shí)等待相應(yīng)客戶端應(yīng)用程序發(fā)出的請(qǐng)求,客戶端應(yīng)用程序能夠自動(dòng)尋找服務(wù)器程序,請(qǐng)求發(fā)送并接收數(shù)據(jù)庫服務(wù)器返回來的露營(yíng)地相應(yīng)信息。
圖1 C/S體系結(jié)構(gòu)圖
系統(tǒng)使用MyEclipse、JDK、Tomcat、MySql開發(fā)服務(wù)器端,使用Eclipse、JDK、Android SDK、ADT開發(fā)Android客戶端。
在Web Service服務(wù)器端采用CXF架構(gòu)與Spring和Hibernate架構(gòu)結(jié)合使用,使服務(wù)器端具有高類聚低耦合的特性。Android端作為手持移動(dòng)終端,利用Tomcat作為自定義Web Service的服務(wù)器調(diào)用露營(yíng)地相關(guān)信息。根據(jù)露營(yíng)地的地理信息請(qǐng)求給百度地圖,通過對(duì)百度地圖的調(diào)用實(shí)現(xiàn)地圖功能。通過百度媒體云平臺(tái)實(shí)現(xiàn)視頻公開流媒體地址。系統(tǒng)時(shí)序圖如圖2所示。
圖2 系統(tǒng)時(shí)序圖
露營(yíng)信息查詢系統(tǒng)主要模塊有露營(yíng)地查詢篩選模塊、露營(yíng)地推薦模塊、百度地圖的應(yīng)用。軟件功能圖如圖3所示。
露營(yíng)地查詢篩選模塊主要運(yùn)用自定義Web Service接口調(diào)用數(shù)據(jù)庫查詢露營(yíng)地名稱或根據(jù)具體露營(yíng)地調(diào)用詳細(xì)信息。
露營(yíng)地推薦模塊中圖片推薦主要通過自定義接口實(shí)現(xiàn)調(diào)用,視頻推薦模塊通過自定義接口獲得指定視頻的公開流媒體地址,實(shí)現(xiàn)視頻播放。
地圖規(guī)劃模塊通過Android客戶端請(qǐng)求地理位置編碼給百度地圖API定位選擇的露營(yíng)地并且根據(jù)需要規(guī)劃路徑。
圖3 軟件功能圖
此模塊采用C/S體系結(jié)構(gòu),實(shí)現(xiàn)了Android客戶端與自定義Web Service服務(wù)器的連接、方法調(diào)用和數(shù)據(jù)的傳輸。Android端需要在AndroidManifest.xm l上聲明WiFi和GPRS的權(quán)限及操作權(quán)限,使客戶端能夠連接網(wǎng)絡(luò)搜索到自定義服務(wù)器。使用ksoap2-android.jar文件調(diào)用Web Service所暴露的操作。
2.1.1 Web Service請(qǐng)求和響應(yīng)
在客戶端定義WebServiceUtil類利用現(xiàn)有ksoap2_android.jar包實(shí)現(xiàn)服務(wù)器與客戶端的連接。連接Web Service方法如下:HttpTransportSE transport=new HttpTransportSE(url)創(chuàng)建此實(shí)例對(duì)象實(shí)現(xiàn)調(diào)用操作,envelope.bodyOut=soapObject將傳出SOAP消息給Web Service。調(diào)用transport.call(soupaction,envelope)作為遠(yuǎn)程調(diào)用Web Service。使用SoapObject result1=(SoapObject)envelope1.bodyIn獲取服務(wù)器響應(yīng)返回的SOAP消息。Android端調(diào)用Web Service的流程圖如圖4所示。
2.1.2 露營(yíng)地查詢及篩選模塊實(shí)現(xiàn)
用戶可根據(jù)直接錄入露營(yíng)地名稱實(shí)現(xiàn)模糊查詢,或者經(jīng)由主題、省份、星級(jí)和類別選擇的方式篩選查詢露營(yíng)地名稱。
點(diǎn)擊查詢或篩選按鈕,Android手機(jī)客戶端開始建立與Web Service服務(wù)器的聯(lián)系,將所要調(diào)用的Web Service接口名稱以及參數(shù)值傳輸?shù)絎eb Service。再由自定義服務(wù)器內(nèi)部查詢,將數(shù)據(jù)庫中的信息響應(yīng)返回Android手機(jī)客戶端應(yīng)用程序,實(shí)現(xiàn)數(shù)據(jù)在UI界面上的顯示。
為了更好地反饋及響應(yīng)信息,本系統(tǒng)采用List<Map<String,Object>>的數(shù)據(jù)類型,將相應(yīng)的詳細(xì)信息封裝到Map<String,Object>中,使用鍵值對(duì)方便信息的調(diào)用,并且使用List對(duì)象封裝數(shù)據(jù),方便數(shù)據(jù)的存取,保證了數(shù)據(jù)的高效性和準(zhǔn)確性。
圖4 Android端調(diào)用Web Service的流程圖
視頻推薦模塊采用網(wǎng)絡(luò)視頻作為源視頻,百度媒體云通過HTTP Restful API以及跨終端平臺(tái)SDK實(shí)現(xiàn)基于BCS視頻存儲(chǔ)、編碼、分布式轉(zhuǎn)碼等相關(guān)視頻服務(wù)。
Android當(dāng)前支持Http協(xié)議和RTSP協(xié)議傳輸視頻流媒體[3]。
1)獲取url地址
利用百度媒體云,將所需視頻傳輸?shù)矫襟w云中,根據(jù)Android所需格式大小進(jìn)行轉(zhuǎn)碼處理后公開流媒體地址,存儲(chǔ)在數(shù)據(jù)庫中。在Android程序中利用Web Service接口獲取數(shù)據(jù)庫中的url地址。
2)播放視頻
使用Android中的VideoView作為容器盛放視頻流媒體,使用MediaController控制流媒體播放及進(jìn)程。主要代碼如下:
main_video=(videoview)findViewById(R.id.main_video);
MediaController mc=new MediaController(this);
main_video.setVideoURI(Uri.parse(url));
main_video.setMediaController(mc);
main_video.requestFocus();
main_video.start();
JavaScript語言寫的百度地圖API能夠?qū)俣鹊貓D嵌入到用戶指定客戶端。利用百度地圖API,露營(yíng)信息系統(tǒng)的地圖模塊調(diào)用百度地圖步驟如下:
1)連接調(diào)用百度地圖
首先,在AndroidManifest.xml中添加在百度公司官網(wǎng)注冊(cè)軟件獲得的密鑰,導(dǎo)入百度地圖API。在xml文件中聲明和獲得WiFi、網(wǎng)絡(luò)、精確定位GPS等相關(guān)權(quán)限。在調(diào)用地圖定義的類SDKInitializer.initialize(getApplicationContext())實(shí)現(xiàn)地圖SDK各組件調(diào)用的初始化,創(chuàng)建MapView實(shí)例對(duì)象,使用戶獲得地圖資源的控制。其次,初始化搜索模塊并注冊(cè)事件監(jiān)聽,其中監(jiān)聽器功能包括標(biāo)記查找位置、設(shè)置地圖的中心點(diǎn)等。最后發(fā)起地理編碼的請(qǐng)求,實(shí)現(xiàn)地理信息在地圖上的定位等功能。
2)定位當(dāng)前所在位置
使用百度地圖定位SDK,采用GPS、基站、WiFi信號(hào)定位[4]。當(dāng)應(yīng)用程序向定位、SDK發(fā)起定位請(qǐng)求時(shí),定位SDK會(huì)根據(jù)應(yīng)用的3種定位信息的優(yōu)先順序(默認(rèn)順序?yàn)镚PS、WiFi、基站定位)以及實(shí)際的開啟及連接情況來生成相應(yīng)定位依據(jù)進(jìn)行高精度混合定位。百度地圖定位原理圖如圖5所示。百度地圖API采用經(jīng)緯度坐標(biāo)系和莫卡托投影坐標(biāo)系,其中經(jīng)緯度坐標(biāo)系利用地球上的球面坐標(biāo)系統(tǒng),摩卡托投影坐標(biāo)系是一種等角正切圓柱投影[5]。
圖5 百度地圖定位原理圖
首先在工程文件中加入開發(fā)包locSDK.jar,在百度地圖定位模塊中,首先在主線程中聲明LocationClient類設(shè)定相應(yīng)參數(shù)。其次,實(shí)現(xiàn)BDLocationListener接口實(shí)現(xiàn)數(shù)據(jù)為BDLocation類型的接收異步返回的定位結(jié)果。其定位關(guān)鍵代碼如下:
3)規(guī)劃路徑
地圖的路徑規(guī)劃是特殊的空間檢索,首先要對(duì)檢索的相關(guān)方法進(jìn)行初始化即明確要搜索路徑的起點(diǎn)和終點(diǎn)。Android SDK支持路徑搜索,百度地圖API提供的服務(wù)接口為:TransitRoute公交路線搜索服務(wù),DrivingRoute駕車路線搜索服務(wù),WalkingRoute步行路徑搜索服務(wù),TrafficControl實(shí)時(shí)路況控件提供實(shí)時(shí)和歷史路況信息服務(wù)[6]。
駕車路線搜索分為3種策略:時(shí)間最優(yōu)(MKSearch.ECAR_TIME_FIRST)、費(fèi)用最少(MKSearch.ECAR_FEE_FIRST)和距離最短(MKSearch.ECAR_DIS_FIRST)。步行和公交路線搜索主要使用百度地圖API所提供的接口[7]。其路線搜索返回搜索結(jié)果關(guān)鍵代碼如下:
根據(jù)上述的環(huán)境和設(shè)計(jì)開放情況,首先在MyEclipse軟件中開啟Tomcat,使自定義Web Service作為數(shù)據(jù)庫服務(wù)器提供數(shù)據(jù)支持,其次將Android露營(yíng)信息系統(tǒng)的apk安裝到Android手機(jī)終端,開始進(jìn)行測(cè)試。
1)UI主界面顯示
UI主界面實(shí)現(xiàn)對(duì)系統(tǒng)功能的導(dǎo)航,方便使用者能夠快速找到想要的功能。在主界面上主要提供了查詢露營(yíng)地、篩選露營(yíng)地、地圖定位導(dǎo)航以及熱門露營(yíng)地推薦功能,如圖6所示。露營(yíng)地具體查詢方式以及詳細(xì)露營(yíng)信息如圖7所示。
圖6 露營(yíng)信息系統(tǒng)主界面(截圖)
圖7 露營(yíng)地查詢功能界面(截圖)
2)地圖定位和規(guī)劃
Android客戶端開啟GPS或WiFi功能,應(yīng)用程序?qū)⑼ㄟ^定位請(qǐng)求發(fā)起定位模式,并且根據(jù)用戶的選擇幫助用戶規(guī)劃露營(yíng)地路線,如圖8所示。
圖8 地圖定位和規(guī)劃界面(截圖)
露營(yíng)信息系統(tǒng)在一定程度上了滿足了露營(yíng)愛好者對(duì)于露營(yíng)地的信息需求,不僅為用戶提供露營(yíng)地的信息查詢,解決了Android手機(jī)用戶僅僅使用少量的內(nèi)存就可以完成方便快捷的露營(yíng)信息查詢,減少了以往的數(shù)據(jù)庫信息都存儲(chǔ)在應(yīng)用程序內(nèi)部的問題,而且還擴(kuò)展了地圖的功能,在系統(tǒng)中添加了地圖定位和規(guī)劃,方便用戶使用。此外,為了獲得更好的用戶體驗(yàn),露營(yíng)信息系統(tǒng)還能進(jìn)一步完善,做到各個(gè)客戶端的交互,實(shí)現(xiàn)資源共享,完成各個(gè)客戶端之間的互聯(lián)互通功能。
[1] 向富華.中國(guó)房車旅游發(fā)展存在的問題及對(duì)策探討[J].三峽大學(xué)學(xué)報(bào):人文社會(huì)科學(xué)版,2014(1):46-51.
[2] ARMSTRONG E.The Java Web Service tutorial[M].USA:Pearsopn,2003.
[3] 魏濤,彭濤,鄭建宏,等.基于Android的流媒體播放器的研究與設(shè)計(jì)[J].電視技術(shù),2014,38(9):102-104.
[4] 王培海.基于Android的移動(dòng)云存儲(chǔ)系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].電視技術(shù),2011,35(15):94-97.
[5] 孫咸磊,許捍衛(wèi).基于移動(dòng)設(shè)備的定位跟蹤系統(tǒng)及其實(shí)現(xiàn)[J].地理空間信息,2014(2):111-113.
[6] 李釗,吳瓊霖,杜美玲.基于iphone的地圖搜索應(yīng)用的設(shè)計(jì)與實(shí)現(xiàn)[J].電腦知識(shí)與技術(shù),2014(5):1035-1037.
[7] 董紹軒.GIS中常用坐標(biāo)系的比較與轉(zhuǎn)換[J].硅谷,2013(11):163-140.