陸奕帆,郭曉金,陳 沉,簡超峰
(重慶郵電大學 信號與信息處理重慶市重點實驗室,重慶 400065)
隨著近年來旅游業的飛速發展,越來越多的戶外活動得到了人們的關注。我國擁有龐大的旅游市場,私家車出游也將達到小高峰,一大批私家車服務設施如汽車旅館、汽車營地、加油維修站點等的建立將會帶動國內自駕游出行人數的增長。隨著旅游業的蒸蒸日上,大量企業和資金的介入共同加速了旅游文化的發展,而露營地的建設也將成為旅游地的新亮點[1]。
智慧旅游作為智慧城市的外延,利用通信與信息技術提升客戶體驗,保障了行業信息一體化的管理,刺激旅游產業的快速發展。使用云計算、物聯網、下一代網絡等新技術,借助終端通過互聯網或移動網絡主動獲取旅游資源,實現服務于大眾的全新旅游模式。本文設計了基于Android系統的露營地信息軟件系統。傳統的信息系統數據庫在設計之初采用Android內嵌Sqlite數據庫,由于屬于應用程序的一部分,占用Android客戶手機內存空間。而本露營信息系統基于傳統系統的基礎上,將所需的露營信息數據庫放置在網絡數據庫服務端,采用Web Service技術[2]實現網絡傳輸數據,利用網絡流媒體數據傳輸視頻,結合智慧旅游概念,提升使用者的服務體驗。
露營信息系統的主題設計思路是Android操縱端能夠通過實際需要進行露營地推薦、露營地的篩選、獲得指定露營地的圖片、露營地介紹、預定電話以及地理地圖的顯示。
該系統采用C/S體系結構如圖1所示,將應用程序分為數據庫服務器和客戶端應用程序兩個部分。數據庫服務器一旦被啟動就隨時等待相應客戶端應用程序發出的請求,客戶端應用程序能夠自動尋找服務器程序,請求發送并接收數據庫服務器返回來的露營地相應信息。

圖1 C/S體系結構圖
系統使用MyEclipse、JDK、Tomcat、MySql開發服務器端,使用Eclipse、JDK、Android SDK、ADT開發Android客戶端。
在Web Service服務器端采用CXF架構與Spring和Hibernate架構結合使用,使服務器端具有高類聚低耦合的特性。Android端作為手持移動終端,利用Tomcat作為自定義Web Service的服務器調用露營地相關信息。根據露營地的地理信息請求給百度地圖,通過對百度地圖的調用實現地圖功能。通過百度媒體云平臺實現視頻公開流媒體地址。系統時序圖如圖2所示。

圖2 系統時序圖
露營信息查詢系統主要模塊有露營地查詢篩選模塊、露營地推薦模塊、百度地圖的應用。軟件功能圖如圖3所示。
露營地查詢篩選模塊主要運用自定義Web Service接口調用數據庫查詢露營地名稱或根據具體露營地調用詳細信息。
露營地推薦模塊中圖片推薦主要通過自定義接口實現調用,視頻推薦模塊通過自定義接口獲得指定視頻的公開流媒體地址,實現視頻播放。
地圖規劃模塊通過Android客戶端請求地理位置編碼給百度地圖API定位選擇的露營地并且根據需要規劃路徑。

圖3 軟件功能圖
此模塊采用C/S體系結構,實現了Android客戶端與自定義Web Service服務器的連接、方法調用和數據的傳輸。Android端需要在AndroidManifest.xm l上聲明WiFi和GPRS的權限及操作權限,使客戶端能夠連接網絡搜索到自定義服務器。使用ksoap2-android.jar文件調用Web Service所暴露的操作。
2.1.1 Web Service請求和響應
在客戶端定義WebServiceUtil類利用現有ksoap2_android.jar包實現服務器與客戶端的連接。連接Web Service方法如下:HttpTransportSE transport=new HttpTransportSE(url)創建此實例對象實現調用操作,envelope.bodyOut=soapObject將傳出SOAP消息給Web Service。調用transport.call(soupaction,envelope)作為遠程調用Web Service。使用SoapObject result1=(SoapObject)envelope1.bodyIn獲取服務器響應返回的SOAP消息。Android端調用Web Service的流程圖如圖4所示。
2.1.2 露營地查詢及篩選模塊實現
用戶可根據直接錄入露營地名稱實現模糊查詢,或者經由主題、省份、星級和類別選擇的方式篩選查詢露營地名稱。
點擊查詢或篩選按鈕,Android手機客戶端開始建立與Web Service服務器的聯系,將所要調用的Web Service接口名稱以及參數值傳輸到Web Service。再由自定義服務器內部查詢,將數據庫中的信息響應返回Android手機客戶端應用程序,實現數據在UI界面上的顯示。
為了更好地反饋及響應信息,本系統采用List<Map<String,Object>>的數據類型,將相應的詳細信息封裝到Map<String,Object>中,使用鍵值對方便信息的調用,并且使用List對象封裝數據,方便數據的存取,保證了數據的高效性和準確性。

圖4 Android端調用Web Service的流程圖
視頻推薦模塊采用網絡視頻作為源視頻,百度媒體云通過HTTP Restful API以及跨終端平臺SDK實現基于BCS視頻存儲、編碼、分布式轉碼等相關視頻服務。
Android當前支持Http協議和RTSP協議傳輸視頻流媒體[3]。
1)獲取url地址
利用百度媒體云,將所需視頻傳輸到媒體云中,根據Android所需格式大小進行轉碼處理后公開流媒體地址,存儲在數據庫中。在Android程序中利用Web Service接口獲取數據庫中的url地址。
2)播放視頻
使用Android中的VideoView作為容器盛放視頻流媒體,使用MediaController控制流媒體播放及進程。主要代碼如下:
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能夠將百度地圖嵌入到用戶指定客戶端。利用百度地圖API,露營信息系統的地圖模塊調用百度地圖步驟如下:
1)連接調用百度地圖
首先,在AndroidManifest.xml中添加在百度公司官網注冊軟件獲得的密鑰,導入百度地圖API。在xml文件中聲明和獲得WiFi、網絡、精確定位GPS等相關權限。在調用地圖定義的類SDKInitializer.initialize(getApplicationContext())實現地圖SDK各組件調用的初始化,創建MapView實例對象,使用戶獲得地圖資源的控制。其次,初始化搜索模塊并注冊事件監聽,其中監聽器功能包括標記查找位置、設置地圖的中心點等。最后發起地理編碼的請求,實現地理信息在地圖上的定位等功能。
2)定位當前所在位置
使用百度地圖定位SDK,采用GPS、基站、WiFi信號定位[4]。當應用程序向定位、SDK發起定位請求時,定位SDK會根據應用的3種定位信息的優先順序(默認順序為GPS、WiFi、基站定位)以及實際的開啟及連接情況來生成相應定位依據進行高精度混合定位。百度地圖定位原理圖如圖5所示。百度地圖API采用經緯度坐標系和莫卡托投影坐標系,其中經緯度坐標系利用地球上的球面坐標系統,摩卡托投影坐標系是一種等角正切圓柱投影[5]。

圖5 百度地圖定位原理圖
首先在工程文件中加入開發包locSDK.jar,在百度地圖定位模塊中,首先在主線程中聲明LocationClient類設定相應參數。其次,實現BDLocationListener接口實現數據為BDLocation類型的接收異步返回的定位結果。其定位關鍵代碼如下:

3)規劃路徑
地圖的路徑規劃是特殊的空間檢索,首先要對檢索的相關方法進行初始化即明確要搜索路徑的起點和終點。Android SDK支持路徑搜索,百度地圖API提供的服務接口為:TransitRoute公交路線搜索服務,DrivingRoute駕車路線搜索服務,WalkingRoute步行路徑搜索服務,TrafficControl實時路況控件提供實時和歷史路況信息服務[6]。
駕車路線搜索分為3種策略:時間最優(MKSearch.ECAR_TIME_FIRST)、費用最少(MKSearch.ECAR_FEE_FIRST)和距離最短(MKSearch.ECAR_DIS_FIRST)。步行和公交路線搜索主要使用百度地圖API所提供的接口[7]。其路線搜索返回搜索結果關鍵代碼如下:

根據上述的環境和設計開放情況,首先在MyEclipse軟件中開啟Tomcat,使自定義Web Service作為數據庫服務器提供數據支持,其次將Android露營信息系統的apk安裝到Android手機終端,開始進行測試。
1)UI主界面顯示
UI主界面實現對系統功能的導航,方便使用者能夠快速找到想要的功能。在主界面上主要提供了查詢露營地、篩選露營地、地圖定位導航以及熱門露營地推薦功能,如圖6所示。露營地具體查詢方式以及詳細露營信息如圖7所示。

圖6 露營信息系統主界面(截圖)

圖7 露營地查詢功能界面(截圖)
2)地圖定位和規劃
Android客戶端開啟GPS或WiFi功能,應用程序將通過定位請求發起定位模式,并且根據用戶的選擇幫助用戶規劃露營地路線,如圖8所示。

圖8 地圖定位和規劃界面(截圖)
露營信息系統在一定程度上了滿足了露營愛好者對于露營地的信息需求,不僅為用戶提供露營地的信息查詢,解決了Android手機用戶僅僅使用少量的內存就可以完成方便快捷的露營信息查詢,減少了以往的數據庫信息都存儲在應用程序內部的問題,而且還擴展了地圖的功能,在系統中添加了地圖定位和規劃,方便用戶使用。此外,為了獲得更好的用戶體驗,露營信息系統還能進一步完善,做到各個客戶端的交互,實現資源共享,完成各個客戶端之間的互聯互通功能。
[1] 向富華.中國房車旅游發展存在的問題及對策探討[J].三峽大學學報:人文社會科學版,2014(1):46-51.
[2] ARMSTRONG E.The Java Web Service tutorial[M].USA:Pearsopn,2003.
[3] 魏濤,彭濤,鄭建宏,等.基于Android的流媒體播放器的研究與設計[J].電視技術,2014,38(9):102-104.
[4] 王培海.基于Android的移動云存儲系統設計與實現[J].電視技術,2011,35(15):94-97.
[5] 孫咸磊,許捍衛.基于移動設備的定位跟蹤系統及其實現[J].地理空間信息,2014(2):111-113.
[6] 李釗,吳瓊霖,杜美玲.基于iphone的地圖搜索應用的設計與實現[J].電腦知識與技術,2014(5):1035-1037.
[7] 董紹軒.GIS中常用坐標系的比較與轉換[J].硅谷,2013(11):163-140.