移動自助旅游系統(tǒng)設計與實現(xiàn)
引言
智慧旅游的特點在于智慧,通過大數(shù)據(jù)、云計算等方法,讓人們的旅行變得智慧起來,人們可以通過智能手機來訂景點門票、查景點說明、進行路徑規(guī)劃,實現(xiàn)真正意義上的智慧旅游。本課題將旅游業(yè)和Android智能平臺相連,搭建出一款移動自助旅游軟件,包括實時定位、路徑規(guī)劃、景點搜索、景點展示功能,方便游客的出行旅游。
1移動自助旅游平臺設計
1.1移動自助旅游系統(tǒng)的總體設計
如圖1所示,本移動自助旅游軟件分為客戶端和服務器端兩個部分,服務器端包括定位服務和地圖服務,服務器端為客戶端提供數(shù)據(jù)和訪問請求:客戶端是基于百度地圖API平臺進行設計和開發(fā)的。
1.2移動自助旅游的實現(xiàn)方法
本軟件基于Android開發(fā)平臺,以百度地圖開源API為工具,以移動自助旅游為背景,在Android系統(tǒng)的平板或手機上進行開發(fā),實現(xiàn)跟移動自助旅游有關的四大主要功能:
(1)基于Android系統(tǒng),將百度地圖APIsDK導入到程序中,并實現(xiàn)定位功能。
百度地圖開源API為開發(fā)者提供了強大的數(shù)據(jù)資源,開發(fā)者可以下載百度地圖提供的API,直接導入到程序中,然后通過相關代碼調用導入的程序包,整合后便可實現(xiàn)定位功能。
(2)基于Android系統(tǒng),實現(xiàn)電子地圖的查詢和搜索功能。
通過在電子地圖上搜索目的地進行景點查詢時,數(shù)據(jù)信息由網絡獲取,需要開發(fā)者自己定義搜索框,然后通過字符串的傳輸和接收,再與按鍵綁定,實現(xiàn)在電子地圖中的檢索功能。
(3)基于Android系統(tǒng),研究電子地圖路徑規(guī)劃算法。
在路徑檢索服務器中,百度地圖存儲了由全國各地收集的路網數(shù)據(jù)。道路數(shù)據(jù)的存儲結構是一個加權圖,權8是基于重距和離其因素計算的值。當用戶計算起點和終點時,服務器需要做的是搜索地圖的最小加權路徑。算法具有不同的權8,可以同時計算多條路線:最短路線、最快路線時間、減少紅燈等等。
(4)基于Android系統(tǒng),實現(xiàn)景點展示功能。
用戶在客戶端搜索景點的關鍵詞,然后通過按鍵跳轉,展示出用戶所搜索的景點。
功能設計:設計出一款具有顯示地圖、精準定位、景點搜索、路徑規(guī)劃、景點展示功能的電子地圖。
開發(fā)程序:在Android平臺上,使用Java語言進行開發(fā)。
軟件測試:在實現(xiàn)了功能之后,通過調試使這款自助旅游軟件更加完善,減少錯誤。
2移動自助旅游平臺實現(xiàn)
2.1顯示百度地圖的基本地圖的設計
用戶在使用百度地圖開源的資源之前,需要在百度開發(fā)者平臺獲取開發(fā)秘鑰。下面介紹在Androidstudio中配置工程的具體步驟:
(1)下載開發(fā)包:首先要在百度地圖開發(fā)者平臺的產品下載中下載自己需要的包。下載完畢后再打開Androidstudio新建項目,輸入項目名稱,注意與申請AK秘鑰時的項目名稱和包名相對應。
(2)將開發(fā)包拷貝到工程:在工程應用的libs目錄下放入baidumapapi***.jar包,新建jniLibs.src目錄下的so動態(tài)庫工程會自動加載,無需手動配置。
(3)向工程中添加.jar文件:使用Androidstudio時,在工程配置中,我們還需要把拷貝到工程中的jar包集成到自己建立的工程中,集成用AddAsLibrary。屆時,在gradle相關文件中,會生成對.jar文件的說明。
2.2顯示百度地圖的基本地圖的實現(xiàn)
首先需要配置AndroidManifest.Ⅹml。
(1)在AndroidManifest中添加AK值、所需權限等信息:
(2)在定位的activitylocation.Ⅹml文件中添加地圖控件:
(3)應用程序創(chuàng)建時,所引用的xonteⅩt全局變量放在DemoApplication.java中:
(4)創(chuàng)建地圖Activity,管理地圖的生命周期。
完成以上步驟后,運行程序,便可在真機(虛擬機)上顯示地圖。
2.3百度地圖定位功能模塊的實現(xiàn)
定位功能的實現(xiàn),需要去借助百度地圖位置sDK。具體操作如下:
(l)添加百度地圖定位功能的sDK(包括jar包和.so文件)。
(2)添加百度地圖定位權限。
使用百度地圖定位sDK,首先要在AndroidManifest中聲明service組件。在此之后,百度地圖還要能夠獲取經緯度、獲取地址、獲取位置描述、獲取周邊P0I。這樣的定位功能才能基本滿足人們的所需。利用百度地圖定位sDK,不僅可以獲得經緯度信息,還可以獲得當前地點的地址信息。獲取方法和相關配置如下:l)初始化LocationC1ient類:在主線程中聲明LocationC1ient類對象,該對象需要傳入Context類型參數(shù);2)配置定位sDK參數(shù);3)實現(xiàn)BDAbstractLocationListener接口;4)得到定位地址信息。
(3)最后在LocationDemo.java的0nCreate中調用Location-C1ient的start()方法,發(fā)起請求。在BDAbstractLocationListener接口中,便可獲得定位地址相關的信息。
2.4移動自助旅游P01搜索模塊功能的設計和實現(xiàn)
本項目所用的信息交互需要連入互聯(lián)網,數(shù)據(jù)從網絡中獲取。當游客在客戶端提出了訪問請求后,聯(lián)網數(shù)據(jù)庫開始為wEB服務器提供數(shù)據(jù),之后數(shù)據(jù)再返回安卓客戶端供游客參考。本項目所提到的檢索功能在地理信息系統(tǒng)上稱為P0I檢索,用戶在檢索欄輸入自己的興趣點,然后百度地圖返回這些興趣點并顯示在地圖中,這便是本部分功能的設計。
本項目實現(xiàn)了普通搜索和地點周邊搜索功能,下面介紹具體的實現(xiàn)辦法:
(1)創(chuàng)建搜索對象,使用靜態(tài)方法:newInstance。
(2)設置覆蓋類:為了在地圖上顯示定位,開發(fā)者需要自己先建立一個覆蓋物(Poi0ver1ay)的.java文件,之后在P0I檢索的.java文件中調用。
(3)觸發(fā)檢索:在定位的界面通過P0I檢索功能,通過1istview加入顯示周邊景點的功能。這個功能能夠查找周邊方圓500m內用戶所輸入的景點,如果該景點在方圓500m內,則返回值。
2.5移動自助旅游路徑規(guī)劃模塊的設計與實現(xiàn)
百度地圖sDK為開發(fā)者提供了全面方便的路線規(guī)劃算法資源,包括了跨城路徑規(guī)劃、步行、公交、騎行和駕車。不同的出行方式,在實現(xiàn)功能的時候都需要新建一個0ver1ay來畫出步行路線圖層,包括起點、終點和轉彎點。具體的實現(xiàn)方法如下:
(1)創(chuàng)建路徑規(guī)劃檢索。
(2)注冊路徑規(guī)劃檢索的監(jiān)聽者,并且獲得檢索結果。
(3)準備路徑規(guī)劃檢索的起點和終點信息。
首先定義起點和終點的字符串:
privateEditTextstartNodestr;
privateEditTextendNodestr;
聲明起點、終點信息,并調用字符串:
P1anNodestNode=P1anNode.withCityNameAndP1aceName("北京",start);
P1anNodeenNode=P1anNode.withCityNameAndP1aceName("北京",end);
(4)如果輸入的字符串不為空并且沒有錯誤,則返回數(shù)據(jù)。
同時,在路徑規(guī)劃中,除了需要顯示路徑信息的文本框,起點和終點的圖標也需要提前準備好,在路徑規(guī)劃工作時,直接進行調用即可。
2.6移動自助旅游景點展示模塊的設計與實現(xiàn)
在布局文件中定義這個按鍵(button)的ID為@+id/showup,實現(xiàn)的目標為:在文本框輸入景點后,點擊"景點展示"的按鍵,便跳轉到相關景點。實現(xiàn)步驟如下:
(1)在.java文件中找到布局文件所定義的按鍵:Buttonbtn=(Button)findViewById(R.id.showup);
(2)設置按鍵監(jiān)聽:
btn.set0nC1ickListener(newView.0nC1ickListener(){);
(3)從Edittext的文本框中得到字符串:
EditTextet=(EditText)findViewById(R.id.searchkey);stringcn=et.getText().tostring();
(4)每個景點的字符串(cn)為一種情況,通過switch語句來調轉,以天安門為例:
case"天安門":
Intentintent=newIntent(PoisearchDemo.this,useTiananmen.c1ass);
startActivity(intent);
break;
3系統(tǒng)優(yōu)化與改進
在游客眼中,好的系統(tǒng)能夠幫助游客合理安排游玩路線,僅有普通的路徑規(guī)劃無法體現(xiàn)自助旅游的特點,希望在路徑規(guī)劃上加以改進,開發(fā)出類似于"旅游景點最多路線"的路徑規(guī)劃,不斷滿足游客需求。