柴群+梁劍波+楊暉+吳京澄
摘要:為了提高人們對地圖的使用效率,應用在制作的過程中本著“便捷”“實用”的特點,針對手機地圖的功能進行分析。在借鑒百度地圖API(Application Programming Interface,應用程序接口) 優(yōu)點的基礎上,利用位置服務技術,完成用戶的自我定位、附近信息以及路線導航等功能。
關鍵詞:Android 平臺;手機地圖;百度地圖API;位置服務
中圖分類號:TP311 文獻標識碼:A 文章編號:1009-3044(2016)31-0046-02
1 位置服務簡介
根據(jù)百度百科的定義,位置服務(LBS,Location Based Services)又稱定位服務,LBS是由移動通信網(wǎng)絡和衛(wèi)星定位系統(tǒng)結合在一起提供的一種增值業(yè)務,通過一組定位技術獲得移動終端的位置信息(如經(jīng)緯度坐標數(shù)據(jù)),提供給移動用戶本人或他人以及通信系統(tǒng),實現(xiàn)各種與位置相關的業(yè)務。實質(zhì)上是一種概念較為寬泛的與空間位置有關的新型服務業(yè)務。
2004年,美國學者Reichenbacher將用戶使用LBS的服務歸納為五類:定位(個人位置定位)、導航(路徑導航)、查詢(查詢某個人或某個對象)、識別(識別某個人或?qū)ο螅?、事件檢查(當出現(xiàn)特殊情況下向相關機構發(fā)送帶求救或查詢的個人位置信息)。
本文所研究的是基于電子地圖的一種定位、導航、查詢與位置相關的服務研究。
2 Android系統(tǒng)簡介
Android(安卓)是目前市場上應用最廣泛的開源系統(tǒng)之一,它以Linux內(nèi)核為根基。安卓與其他的系統(tǒng)的構架類似,采用了分層的形式,平臺的體系構架從上到下分為四層,第一層是提供核心應用程序的應用程序?qū)?;第二層是應用開發(fā)的基礎——應用程序框架層;第三層是支持各個組件運行的系統(tǒng)運行庫層;第四層是作為安卓內(nèi)核的 Linux核心層。
在應用程序中,并非每個應用程序都只有一種組件構造的,大多數(shù)應用程序是由各種組件構造的,跟其他應用程序一樣,Android應用程序也不一定只用一種組件,它通常是由四種組件構造而成的,但也有特殊情況的時候不用或者不止用這四種組件構造。
第一種是作為眾多應用程序組件中的基礎組件——Activity,用戶運行程序看到的界面就是一個Activity,這個組件用于與用戶進行交互。
第二種是對外部的事件做出響應時使用的組件——Broadcast Intent Reciver,作為能夠接收從sendBroadcast()發(fā)出的intent的基類。
第三種與第一種組件擁有相同等級,但它不在界面上顯示,只能在后臺運行的組件——Service,雖然它不在界面上顯示,但可以在后臺和別的組件進行互動。
最后一種是在不同的軟件之間進行數(shù)據(jù)共享,提供統(tǒng)一的接口的組件——ContentProvider。
3 移動地圖實現(xiàn)
3.1主界面的實現(xiàn)
主界面通過線性布局的方式來設計,為了用戶直觀的選擇地圖服務提供了方便,主界面實現(xiàn)過程如下:
1)首先將activity_main.xml文件的總體布局設置成線性布局(LinearLayout),在總體布局下設置兩個字線性布局,將他們的屬性設置好,第一個線性布局將權重設(layout_weight)為20,調(diào)用百度提供的BaiduLBS_Android.jar包中的com.baidu.mapapi.map.MapView類生成組件,設置相關屬性;第二個線性布局將權重設為1,設置四個Button組件,組件名分別為登錄、定位、附近和路線,設置它們的屬性。
2)將布局創(chuàng)建好后,打開MainActivity.java開始編寫代碼。在各種組件初始化以及setContentView方法實現(xiàn)之前,先將ApplicationContext傳入SDKInitializer的initialize()方法中,接著調(diào)用MapView取得MapView對象,之后調(diào)用BaiduMap mBaiduMap = mMapView.getMap()獲取地圖。
運行程序,即可在手機上顯示出該應用,如圖1。
3.2搜索功能的實現(xiàn)
用戶將城市與地點輸入后,單擊 “搜索”按鈕,應用將會在地圖上顯示出對應的地點。實現(xiàn)此功能的步驟如下:
1)應用先獲取用戶輸入的城市和地點,作為內(nèi)容傳到PlaceSearchActivity中的。
2)在PlaceSearchActivity類中接收傳遞過來的數(shù)據(jù)。
3)對數(shù)據(jù)進行解析并查找對應的經(jīng)緯度,將該地點顯示在應用上。
3.3 定位功能的實現(xiàn)
單擊“定位”按鈕,程序會在后臺實現(xiàn)它的功能,并在界面上顯示用戶所在的位置。實現(xiàn)的步驟如下:
1)使用LocationClient類實例化一個對象,通過該對象的registerLocationListener()方法注冊監(jiān)聽函數(shù)。
2)定義一個MyLocationListener類,并實現(xiàn)BDLocationListener類,重寫onReceiveLocation()方法。在onReceiveLocation()中調(diào)用StringBuffer類,設置相關屬性,接著調(diào)用BitmapDescriptor類獲取顯示用戶位置的圖片以及LatLng類獲取用戶所在的經(jīng)緯度,并用OverlayOptions類把圖片和經(jīng)緯度關聯(lián)起來,使用BaiduMap類中的addOverlay()方法添加到地圖中。
3)在MainActivitu中調(diào)用MyLocationListener類并實例化,將實例化的listener傳入LocationClient類的方法registerLocationListener()中。在locationClick()中設置相關屬性。
3.4 附近界面的實現(xiàn)
點擊 “附近”按鈕,程序?qū)⑻D(zhuǎn)到與按鈕關聯(lián)的“附近”界面,用戶可以在文本框中輸入中心點和目標場所進行查找。具體實現(xiàn)過程如下:
1)調(diào)用PoiSearch類實例化poiSearch對象,調(diào)用newInstance()方法,接著調(diào)用OnGetPoiSearchResultListener類實例化poiListener對象,并在poiListener對象里重寫onGetPoiResult()方法和onGetPoiDetailResult()方法。
2)在onGetPoiResult()方法中獲取POI檢索結果,調(diào)用PoiResult類中的getAllPoi()方法,接著調(diào)用BitmapDescriptor類獲取顯示用戶位置的圖片以及LatLng類獲取用戶所在的經(jīng)緯度,并用OverlayOptions類把圖片和經(jīng)緯度關聯(lián)起來,使用BaiduMap類中的addOverlay()方法添加到地圖中。
3)將poiListener對象傳入poiSearch對象調(diào)用的setOnGetPoiSearchResultListener()方法中。
4)在searchOnclick()方法中對輸入的內(nèi)容進行檢索,調(diào)用PoiSearch類的searchInCity()方法。
3.5 路線界面的實現(xiàn)
點擊 “路線”按鈕,程序便會跳轉(zhuǎn)到“路線查詢”界面,在“路線查詢”界面上可以看到兩個編輯框以及四個按鈕,左邊的編輯框?qū)鹗嫉攸c,右邊的編輯框?qū)康牡攸c,四個按鈕代表四種出行方式。用戶在編輯框中輸入起始地和目的地,在四種出行方式中選擇出行方式,即可在地圖上顯示出路線信息。
路線查詢模塊被設置成RoutePlanActivity類,具體實現(xiàn)過程如下:
1)RoutePlanActivity類實現(xiàn)OnMapClickListener,OnGetRoutePlanResultListener接口,在布局文件中定義兩個文本編輯框,分別對應路線的起始地址和目的地址,以及添加四個表示步行、駕車、公交和騎行查詢方式的Button按鈕和顯示地圖的MapView組件。
2)然后對調(diào)用MapView以及BaiduMap對地圖進行初始化,調(diào)用RoutePlanSearch類對搜索模塊進行初始化,并調(diào)用RoutePlanSearch類的setOnGetRoutePlanResultListener()方法注冊事件監(jiān)聽。
3)對四個按鈕設置onClick屬性,值為searchButtonProcess。在RoutePlanActivity中實現(xiàn)searchButtonProcess()方法,并在searchButtonProcess()方法中處理搜索按鈕的響應。
4)在重寫的方法中onGetDrivingRouteResult(),nGetTransitRouteResult(),onGetWalkingRouteResult(),onGetBikingRouteResult()分別駕車、公交、步行和騎行四種出行方式。
4 總結
電子地圖作為用戶出行時為其提供地理信息的工具,要與我們?nèi)粘I畹沫h(huán)境相匹配,但用戶存在移動性,為了符合用戶的移動性、位置性,電子地圖上每一個POI(Point of Interest,信息點),都要與現(xiàn)實中的信息相匹配,在每一個POI點上都要搭載相關的地理信息數(shù)據(jù)。在O2O業(yè)務和移動互聯(lián)網(wǎng)平臺快速發(fā)展的時代,地圖作為用戶和商戶之間聯(lián)系的橋梁,占據(jù)著重要作用。
參考文獻:
[1] 張云.Windows下Android應用程序開發(fā)環(huán)境搭建詳解[J] .計算機時代,2013(1):32-34.
[2] 杜艷綏.基于Android平臺架構應用程序開發(fā)研究[J].電腦編程技巧與維護,2013(6):12-13.
[3] 吳麗淳,樊爽.基于安卓平臺的手機定位軟件開發(fā)[J].計算機與現(xiàn)代化,2014(9):95-98.
[4] 謝濤.基于WiFi的室內(nèi)定位系統(tǒng)的設計與實現(xiàn)[D].南京:南京大學,2013.
[5] 程志平.如何構建一個基礎的百度地圖頁面[J] .數(shù)字化用戶,2013(28).