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