劉萍 章勝江

摘? 要:隨著智能手機的飛速發展,Android平臺為很多人所熟知,人們使用Android的頻率也越來越高,Android手機在各個領域中的使用越發重要,通過使用手機可以獲得人們想要的信息。隨著社會生產力的提高,每個家庭除了生活開銷之外還有所結余,因此,越來越多的人利用工作之余出去游山玩水,但是在游玩的過程中,攜帶的紙質地圖不方便,或者忘記攜帶地圖,會給旅游帶來一定的麻煩。為了解決這個問題,本文提出基于Android的旅游地圖小幫手的開發。
關鍵詞:旅游地圖APP;Android;軟件開發;移動終端地圖服務
中圖分類號:TP311 ? 文獻標識碼:A ? 文章編號:2096-4706(2019)07-0037-03
Abstract:With the rapid development of smart phones,Android platform is well known to many people. People use Android more frequently. The use of Android mobile phones in various fields is becoming more and more important. By using mobile phones,people can get the information they want. With the improvement of social productivity,every family has some surplus besides living expenses. Therefore,more and more people use their spare time to go sightseeing. But in the process of playing,it is inconvenient to carry paper maps or forget to carry maps,which will bring some trouble to tourism. In order to solve this problem,this paper proposes the development of a small assistant of tourism map based on Android.
Keywords:tourist Map APP;Android;software development;mobile Map service
0? 引? 言
移動終端地圖服務的前景主要分為兩個方面:一方面,移動設備上安裝的地圖會給使用者提供更加智能的服務,由智能手機系統Android所帶來的一系列變化使得手機地圖也向著更加智能的方向發展,為用戶提供一體化的生活服務,給人民的生活也帶來幫助,能夠幫助人們查詢行車的路線,也能夠幫助人們預訂旅游過程中需要住宿的酒店,還能夠在娛樂活動場所等方面給人們提供全方位的服務,這應該歸功于移動互聯網和手機終端的飛速發展;另一方面,對于開發者來說,手機地圖開放平臺可以根據用戶需求的不同來為其提供獨家的服務,這樣不但方便了軟件開發人員的工作,而且也能夠使開發出的產品更有針對性和用武之地,這對開發人員來說,能夠大大方便他們的開發過程。手機的應用在當下已經成為主戰場,原來只能在電腦上運行的大部分應用現在都可以在手機上運用,使得人們的出行更加方便,可以通過手機隨時尋找自己想要的資料。
1? 基于Android的旅游地圖小幫手設計
基于Android的旅游地圖小幫手結構采用分層次設計,不但有UI層,還要有完成控制功能的控制層、完成前臺請求的邏輯層和存儲數據的數據層。
軟件架構如圖1所示。
UI:就是使用者與應用直接交互的那一層,UI獲取到用戶的意圖發送給后臺處理,后臺對用戶意圖進行處理之后再把得出的結果傳遞給UI層,UI加載布局文件顯示給用戶瀏覽。本款地圖服務應用的基礎就是UI層,UI主要是XML文件編寫的任務。
控制層:接收到UI層用戶的意圖后,接收數據并且傳遞給處理函數,處理函數經過一系列的傳遞處理后,返回結果給UI,用戶就得到了需要的信息。
邏輯層:用于處理一些前臺請求,例如搜索、定位、分享、獲取全景圖等。
數據層:由于都是通過網絡獲取到的數據,因此沒有數據庫的設計,數據都是通過百度地圖API的接口獲取到的云端數據,包括檢索得到的數據也都是通過百度API接口實現的,雖然數據不需要自己管理,但是數據的流向卻必須通過接口來傳遞。
基于Android的旅游地圖小幫手的功能結構如圖2所示,該圖展示了系統所有功能,包括各功能之間的關系。
2? 基于Android的旅游地圖小幫手核心功能
2.1? 地圖圖層
百度地圖API提供好幾種地圖,有普通地圖(2D/3D)、衛星地圖、實時交通圖、熱力圖等,由于本應用采用版本較低的v2_4_0版本,所以只實現了普通地圖、衛星地圖、交通圖三個基本的地圖,本節主要是介紹不同地圖間的轉換。
首先是地圖圖層顯示的設計,先創建兩個數組:圖層圖片iconsfortucen、圖層文字說明lever,在定義圖層時,由于需要在主界面上加載出其他的界面,需要用到inflate這個方法,然后利用適配器將定義的兩個數組添加到該界面。
(1)使用inflate()找出布局;
(2)通過findViewById()找到控件將gridview添加到gv_tucen中;
(3)setAdapter()將預先定義好的適配器內容添加到gv_tuen;
gv_tuen是嵌入到viewforlever視圖中的布局,通過以上三個步驟就可以將地圖圖層選擇的界面加載到主界面中,其中顯示出來的方法為initPop_tucen_Window();
然后是點擊事件的實現,使用onItemClick()方法根據用戶點擊的不同顯示不同類型的地圖,所以此處使用switch來進行實現:
(1)case0:設置為衛星圖顯示,使用setSatelite(true)進行設置,然后將地圖刷新,具體為mapview.refresh();
(2)Case1:設置為普通地圖顯示,使用setSatelite(false)進行設置,這是因為地圖控件初始默認為普通交通圖,只需要把衛星地圖關閉就可以設置為普通地圖狀態,然后刷新地圖就可以切換至普通地圖;
(3)Case2:設置視角瀏覽地圖,這里與前面兩個的設置不一樣,這里通過地圖控制器設置俯視的視角,通過if判斷是否已經設置為俯視,如果沒設置為俯視就通過? MapControl.setOverlooking()來設置為俯視,最后刷新地圖,需要注意的是這里要設置overlook這個布爾型變量來判斷是否設置了俯視圖。
2.2? 附近圖層
附近圖層實現:點擊附近能夠彈出一個選擇界面,選擇搜索附近的賓館、酒店等,搜索后在地圖上會有紅色標記物,點擊這些標記物會有相應的名稱出現,所以本功能塊主要分兩個過程來實現:彈出附近界面;處理相應的搜索并顯示出來。
首先通過findViewById找到附近按鈕,對其注冊點擊事件setOnClickListener(),在注冊事件中,initPop_fujin_Window()用于加載附近界面,調用showAtLocation()方法顯示在屏幕中心。
initPop_fujin_Window()的實現:通過創建一個Popup Window窗口,顯示viewforfujin,當然這個窗口必須進行相關的設置,例如可以在窗口外點擊屏幕、隱藏窗口,設置位置中心等。viewforfujin的實現與viewforlever類似,都是利用適配器將有關的顯示內容加載到gridview gv_fujin中,然后將gv_fujin加載到顯示窗口中顯示出來。
附近的顯示列表中有很多內容,為此創建了一個圖標數組以及相應的文字說明數組,圖標與文字疊加在一起組成一個元素放置在gridview中,以此類推,組成的元素有:KTV、賓館、美食、加油站、超市、公司、景點、快餐、酒店、洗浴、取款機、銀行等。
經過以上的步驟基本實現了附近窗口的設計以及在主界面中的彈出顯示,附近窗口實現的效果如圖3所示。
2.3? 地圖顯示
地圖顯示為用戶提供一個地圖界面,在顯示時通過定位功能來加載用戶當前位置,地圖顯示不光在主界面需要用到,在其他很多的功能中也有非常多的應用,比如說在離線地圖中,如果要顯示已經下載的地圖離線包,就需要用到地圖顯示功能;在全景圖中,當進行POI(Point of Interest)檢索時也需要用地圖來顯示搜索到的結果,從而獲取全景圖。用戶不只能夠瀏覽地圖,還能夠對地圖進行縮放控制、移動控制等。此外,用戶還可以瀏覽實時交通圖查看實時路況,也能從平面地圖切換成衛星圖,視角可以切換到俯視。
2.4? 路線規劃
輸入起始點地址和終點地址,當啟用步行或者駕車搜索時,會得到一段路線規劃內容,通過列表形式列舉出每一段路程的信息,用戶通過這段路徑信息列表能夠非常清楚地知道下一步應該怎么行進。在這里,由于城市內步行與駕車使用的路線基本上一致,所以將步行和駕車路線規劃放到一起,這樣不只減少了代碼冗余而且減少了開發的工作量,同樣的原理,公交路線也是這樣獲取的,只是內容以及獲取接口不一樣。路線規劃是主界面搜索按鈕的跳轉界面,路線規劃界面提供了三種搜索入口,即通過“步行搜索”搜索步行的路線內容、通過“駕車搜索”搜索駕車路線內容、通過“公交搜索”搜索所有公交路線,除此之外還提供了地點搜索,可以通過搜索地點來顯示地圖。路線選擇是公交路線搜索按鈕的調轉界面,系統為用戶提供公交路線時,只需要點擊列表中的相應公交內容就可以查看公交詳情。路線詳情應與路線選擇共用一個界面,當發出步行路線搜索、駕車路線搜索、點開某個公交路線時出現路線詳情。
2.5? 分享功能
分享功能需要將通過MKSearchListener監聽器得到的定位數據通過系統發送出去,達到分享的目的。所以該功能沒有額外使用別的類實現,直接在主界面定義該按鈕的點擊事件,通過MKSearch對象得到定位數據。
當使用者按下分享按鈕時,share_btn()函數執行,該函數首先利用requestLocation()函數,運用該函數是為了獲取到當前位置的信息,并且得到當前位置的地理位置經緯度信息pt,requestLocation()能夠啟用LocClient對象的requestLocation()方法,該方法能夠引起BDLocation-ListenerImpl監聽器onReceiveLocation方法的回調,回調的結果就是位置經緯度pt1,該經緯度信息對于后面非常重要,因為要分享的結果就是通過這個pt1這個變量解析出來的。
通過定位函數將經緯度信息pt1獲取到了之后,調用百度地圖API search包中MKsearch類的reverseGeocode方法獲取地址信息,該方法中的一個參數就是以地理坐標點為參數,這里傳遞的形參是requestLocation()方法處理得到的pt1坐標點。
reverseGeocode()方法是一個根據地理坐標點獲取地理信息的異步函數,返回結果在MKSearchListener里onGetAddrResult()方法通知,在該方法獲取該地址信息后,賦給變量currentAddr。
接著利用poiRGCShareURLSearch()方法得到地址信息共享URL,將其命名為“分享地址”。得到了分享URL后,結果回調給onGetShareUrlResult函數,該函數中創建了一個發送的意圖,將發送的內容設置為前面得到的地址信息+URL分享地址,格式為:"您的朋友通過生活小地圖與您分享一個位置:"+currentAddr+"/"+result.url,設置的函數為intent.putExtra。最后將已經打包好的intent發送內容通過createChooser方法調用本地應用發送地址給其他人,分享地址。
3? 結? 論
手機的應用在當下已經成為主戰場,原來在電腦上的大部分應用現在都可以在手機上完成,使得人們的出行更加方便,可以通過它去找自己想要的資料。本文開發的基于Android的旅游地圖小幫手使用百度地圖SDK,實現定位、導航、路線、全景等地圖功能,具有較強的實用價值。
參考文獻:
[1] 施連敏,蓋之華.基于Android的百度地圖應用的搭建 [J].技術與市場,2014,21(12):34-35+38.
[2] 張國平,王建璽,董桂林.基于Android平臺的手機地圖服務設計 [J].計算技術與自動化,2015,34(1):111-115.
[3] 柳婷.基于Android手機地圖服務系統的設計與實現 [D].北京:北京郵電大學,2013.
[4] 周穎穎.基于Android平臺的手機地圖系統的實現 [J].現代計算機(專業版),2013(22):74-76.
[5] Google.Android developers. [EB/OL].http://developer.android.com/guide/components/fundame ntals.html.2014.
作者簡介:劉萍(1981-),女,漢族,江西高安人,講師,本科,主要研究方向:計算機應用;章勝江(1977-),男,漢族,安徽東至人,副教授,碩士,主要研究方向:信息技術管理。