KC10880106-i02Android集成百度地圖接口,實現(xiàn)定位+路徑規(guī)劃_第1頁
KC10880106-i02Android集成百度地圖接口,實現(xiàn)定位+路徑規(guī)劃_第2頁
KC10880106-i02Android集成百度地圖接口,實現(xiàn)定位+路徑規(guī)劃_第3頁
KC10880106-i02Android集成百度地圖接口,實現(xiàn)定位+路徑規(guī)劃_第4頁
KC10880106-i02Android集成百度地圖接口,實現(xiàn)定位+路徑規(guī)劃_第5頁
已閱讀5頁,還剩11頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、Android集成百度地圖接口,實現(xiàn)定位+路徑規(guī)劃。新手教程 本文主要內容包括:如何根據(jù)百度地圖接口實現(xiàn)定位,并實現(xiàn)從A到B的路徑規(guī)劃功能(駕車,公交,步行)。本文主要提供給新手參考,如果有錯誤希望博友們指出以便及時改正。1.申請百度地圖SDK的密鑰(填寫安全碼是一定注意:Android SDK安全碼組成:數(shù)字簽名+;+包名)。2.在 下載示例代碼。3.Eclipse中導入實例代碼。4.在AndroidManifest.xml中 把申請的密鑰填進去(如圖).5.這樣就可以運行我們剛剛下載的百度地圖demo.我們下面要做的就是把demo里面能用的代碼改成我們需要的功能:我們需要的功能就是:獲取我

2、的位置,然后幫我導航到我想去的地方。(實際開發(fā)中可能是與服務器交互的任意位置)首先貼上我們的項目結構,文章結尾也會有代碼下載地址(免積分下載)。1.我們需要下載百度地圖API的示例代碼與類參考。如下圖所示。2.Eclipse導入百度地圖BaiduLBS_AndroidSDK_Sample地圖+檢索+LBS云檢索+工具 下的示例項目,大家可以按照本文開頭的配置運行一下demo,本文就不在展示demo運行效果。3.由于我們這次需要的功能是線路規(guī)劃,所以demo中我們需要的類是 RoutePlanDemo,二話不說新建項目先將這個Activity類粘貼進去。4.我們需要在我們自己的Applicati

3、on類中初始化百度SDK組件,所以我們再把demo中的 DemoApplication類粘貼到新建項目。而且我們需要在AndroidManifest中配置此類。配置文件如下。<span style="font-family:Times New Roman;"><manifest xmlns:android=" package="com.example.mybaidumap" android:versionCode="1" android:versionName="1.0" > &l

4、t;uses-sdk android:minSdkVersion="8" android:targetSdkVersion="19" /> <application android:name="com.mybaidu.DemoApplication" android:icon="drawable/ic_launcher" android:label="string/app_name" > <meta-data android:name="com.baidu.lb

5、sapi.API_KEY" android:value="hOR6hNauVspidl4M3OmQttfm" /> <activity android:name="com.mybaidu.RoutePlanDemo" android:configChanges="orientation|keyboardHidden" android:screenOrientation="portrait" android:label="BaiduMapSDKDemo" > <i

6、ntent-filter> <action android:name="ent.action.MAIN" /> <category android:name="ent.category.LAUNCHER" /> </intent-filter> </activity> <service android:name="com.baidu.location.f" android:enabled="true" andro

7、id:process=":remote" > </service> </application> <permission android:name="android.permission.BAIDU_LOCATION_SERVICE" > </permission> <uses-permission android:name="android.permission.BAIDU_LOCATION_SERVICE" > </uses-permission> &l

8、t;uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" > </uses-permission> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" > </uses-permission> <uses-permission android:name="android.permission.INTERNET&quo

9、t; > </uses-permission> <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" > </uses-permission> <!- <uses-permission android:name="android.permission.WRITE_APN_SETTINGS"></uses-permission> -> <uses-permission android:

10、name="android.permission.ACCESS_FINE_LOCATION" > </uses-permission> <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" /> <uses-permission android:name="android.permission.WAKE_LOCK" > </uses-permission> <uses-per

11、mission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_GPS" /> <uses-permission android:name="android.permissi

12、on.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.READ_CONTACTS" /> <uses-permission android:name="android.permission.CALL_PHONE" /> <uses-permission android:name="android.permission.READ_SMS" /> <uses-permission andr

13、oid:name="android.permission.SEND_SMS" /> <!- SDK1.5需要android.permission.GET_TASKS權限判斷本程序是否為當前運行的應用? -> <uses-permission android:name="android.permission.GET_TASKS" /> <uses-permission android:name="android.permission.CAMERA" > </uses-permission&

14、gt; <uses-permission android:name="android.permission.RECORD_AUDIO" > </uses-permission> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" > </uses-permission> <uses-permission android:name="android.permission.RECEIVE_BOOT_C

15、OMPLETED" /> <uses-permission android:name="android.permission.BROADCAST_STICKY" /> <uses-permission android:name="android.permission.WRITE_SETTINGS" /> <!- 來電消音 -> <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" &g

16、t; </uses-permission> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> <supports-screens android:anyDensity="true" android:largeScreens="true"

17、; android:normalScreens="false" android:resizeable="true" android:smallScreens="true" /></manifest></span>5.現(xiàn)在我們來解讀我們剛剛粘貼過來的 RoutePlanDemo類,百度的注釋已經很詳細了,根據(jù)運行demo后的效果,我們只要發(fā)現(xiàn)哪里傳入地址參數(shù)就可以。下面兩句就是我們需要傳入的地圖參數(shù)。 PlanNode stNode = PlanNode.withCityNameAndPlaceName(&

18、quot;北京", editSt.getText().toString(); PlanNode enNode = PlanNode.withCityNameAndPlaceName("北京", editEn.getText().toString();6.可以看出demo中將兩個位置參數(shù)賦值給了PlanNode對象, 現(xiàn)在我們打開剛剛我們下載的類參考中的文檔,路徑如下:百度地圖BaiduLBS_AndroidSDK_Docs地圖+檢索+LBS云檢索+工具index.html找到PlanNode類,此類提供給我們兩個方法如下圖所示:7.所以我們只需要把我們的起點和終點

19、的位置信息(經緯度或者地名和城市名)放入方法的參數(shù)中即可.而現(xiàn)在我們需要的起點是根據(jù)我們實時的定位而決定的,所以現(xiàn)在我們還需要調用百度的定位方法,來獲取我們的當前定位信息。8.要想獲取我們當前所在位置,我們可以實現(xiàn)BDLocationListener接口,使用BDLocation類中的 getLatitude()與getLongitude方法,獲取我們當前的位置。然后將獲取到的經緯度放到下面的方法中即可。PlanNode stNode = PlanNode.withLocation(new LatLng(myLatitude, myLongitude);9.很簡單,到此我們就實現(xiàn)了今天我們想實

20、現(xiàn)的所有功能,我們只需要一個activity類就可以完成我們的百度地圖demo.代碼如下:/* * 此demo用來展示如何進行駕車、步行、公交路線搜索并在地圖使用RouteOverlay、TransitOverlay繪制 * 同時展示如何進行節(jié)點瀏覽并彈出泡泡 */public class RoutePlanDemo extends Activity implements BaiduMap.OnMapClickListener, OnGetRoutePlanResultListener /全局變量private double myLongitude; /經度private double myL

21、atitude; /緯度/關于定位的參數(shù)LocationClient mLocClient;boolean isFirstLoc = true;/ 是否首次定位public MyLocationListenner myListener = new MyLocationListenner(); /瀏覽路線節(jié)點相關 Button mBtnPre = null;/上一個節(jié)點 Button mBtnNext = null;/下一個節(jié)點 int nodeIndex = -1;/節(jié)點索引,供瀏覽節(jié)點時使用 RouteLine route = null; OverlayManager routeOverla

22、y = null; boolean useDefaultIcon = false; private TextView popupText = null;/泡泡view /地圖相關,使用繼承MapView的MyRouteMapView目的是重寫touch事件實現(xiàn)泡泡處理 /如果不處理touch事件,則無需繼承,直接使用MapView即可 MapView mMapView = null; / 地圖View BaiduMap mBaidumap = null; /搜索相關 RoutePlanSearch mSearch = null; / 搜索模塊,也可去掉地圖模塊獨立使用 protected vo

23、id onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_routeplan); CharSequence titleLable = "路線規(guī)劃功能" setTitle(titleLable); /初始化地圖 mMapView = (MapView) findViewById(R.id.map); mBaidumap = mMapView.getMap(); / 開啟定位圖層 mBaidumap.setMyLocati

24、onEnabled(true); mBtnPre = (Button) findViewById(R.id.pre); mBtnNext = (Button) findViewById(R.id.next); mBtnPre.setVisibility(View.INVISIBLE); mBtnNext.setVisibility(View.INVISIBLE); /地圖點擊事件處理 mBaidumap.setOnMapClickListener(this); / 初始化搜索模塊,注冊事件監(jiān)聽 mSearch = RoutePlanSearch.newInstance(); mSearch.s

25、etOnGetRoutePlanResultListener(this); /TODO 定位功能/ 定位初始化mLocClient = new LocationClient(this);mLocClient.registerLocationListener(myListener);LocationClientOption option = new LocationClientOption();option.setOpenGps(true);/ 打開gpsoption.setCoorType("bd09ll"); / 設置坐標類型option.setScanSpan(1000

26、);mLocClient.setLocOption(option);mLocClient.start(); /* * 發(fā)起路線規(guī)劃搜索示例 * * param v */ public void SearchButtonProcess(View v) /重置瀏覽節(jié)點的路線數(shù)據(jù) route = null; mBtnPre.setVisibility(View.INVISIBLE); mBtnNext.setVisibility(View.INVISIBLE); mBaidumap.clear(); PlanNode stNode = PlanNode.withLocation(new LatLng

27、(myLatitude, myLongitude); /TODO 服務器數(shù)據(jù)接口 /PlanNode enNode = PlanNode.withLocation(new LatLng(shopLatitude,shopLongitude); /如果使用服務器傳遞數(shù)據(jù)將shop的經緯度替換 /PlanNode enNode = PlanNode.withCityNameAndPlaceName("無錫", editEn.getText().toString(); PlanNode enNode = PlanNode.withCityNameAndPlaceName(&quo

28、t;無錫", "無錫火車站"); / 實際使用中請對起點終點城市進行正確的設定 if (v.getId() = R.id.drive) mSearch.drivingSearch(new DrivingRoutePlanOption() .from(stNode) .to(enNode); else if (v.getId() = R.id.transit) mSearch.transitSearch(new TransitRoutePlanOption() .from(stNode) .city("無錫") .to(enNode); else

29、 if (v.getId() = R.id.walk) mSearch.walkingSearch(new WalkingRoutePlanOption() .from(stNode) .to(enNode); /* * 節(jié)點瀏覽示例 * * param v */ public void nodeClick(View v) if (route = null | route.getAllStep() = null) return; if (nodeIndex = -1 && v.getId() = R.id.pre) return; /設置節(jié)點索引 if (v.getId() =

30、 R.id.next) if (nodeIndex < route.getAllStep().size() - 1) nodeIndex+; else return; else if (v.getId() = R.id.pre) if (nodeIndex > 0) nodeIndex-; else return; /獲取節(jié)結果信息 LatLng nodeLocation = null; String nodeTitle = null; Object step = route.getAllStep().get(nodeIndex); if (step instanceof Driv

31、ingRouteLine.DrivingStep) nodeLocation = (DrivingRouteLine.DrivingStep) step).getEntrace().getLocation(); nodeTitle = (DrivingRouteLine.DrivingStep) step).getInstructions(); else if (step instanceof WalkingRouteLine.WalkingStep) nodeLocation = (WalkingRouteLine.WalkingStep) step).getEntrace().getLoc

32、ation(); nodeTitle = (WalkingRouteLine.WalkingStep) step).getInstructions(); else if (step instanceof TransitRouteLine.TransitStep) nodeLocation = (TransitRouteLine.TransitStep) step).getEntrace().getLocation(); nodeTitle = (TransitRouteLine.TransitStep) step).getInstructions(); if (nodeLocation = n

33、ull | nodeTitle = null) return; /移動節(jié)點至中心 mBaidumap.setMapStatus(MapStatusUpdateFactory.newLatLng(nodeLocation); / show popup popupText = new TextView(RoutePlanDemo.this); popupText.setBackgroundResource(R.drawable.popup); popupText.setTextColor(0xFF000000); popupText.setText(nodeTitle); mBaidumap.sh

34、owInfoWindow(new InfoWindow(popupText, nodeLocation, null); Override protected void onRestoreInstanceState(Bundle savedInstanceState) super.onRestoreInstanceState(savedInstanceState); Override public void onGetWalkingRouteResult(WalkingRouteResult result) if (result = null | result.error != SearchRe

35、sult.ERRORNO.NO_ERROR) Toast.makeText(RoutePlanDemo.this, "抱歉,未找到結果", Toast.LENGTH_SHORT).show(); if (result.error = SearchResult.ERRORNO.AMBIGUOUS_ROURE_ADDR) /起終點或途經點地址有岐義,通過以下接口獲取建議查詢信息 /result.getSuggestAddrInfo() return; if (result.error = SearchResult.ERRORNO.NO_ERROR) nodeIndex = -1

36、; mBtnPre.setVisibility(View.VISIBLE); mBtnNext.setVisibility(View.VISIBLE); route = result.getRouteLines().get(0); WalkingRouteOverlay overlay = new MyWalkingRouteOverlay(mBaidumap); mBaidumap.setOnMarkerClickListener(overlay); routeOverlay = overlay; overlay.setData(result.getRouteLines().get(0);

37、overlay.addToMap(); overlay.zoomToSpan(); Override public void onGetTransitRouteResult(TransitRouteResult result) if (result = null | result.error != SearchResult.ERRORNO.NO_ERROR) Toast.makeText(RoutePlanDemo.this, "抱歉,未找到結果", Toast.LENGTH_SHORT).show(); if (result.error = SearchResult.ER

38、RORNO.AMBIGUOUS_ROURE_ADDR) /起終點或途經點地址有岐義,通過以下接口獲取建議查詢信息 /result.getSuggestAddrInfo() return; if (result.error = SearchResult.ERRORNO.NO_ERROR) nodeIndex = -1; mBtnPre.setVisibility(View.VISIBLE); mBtnNext.setVisibility(View.VISIBLE); route = result.getRouteLines().get(0); TransitRouteOverlay overla

39、y = new MyTransitRouteOverlay(mBaidumap); mBaidumap.setOnMarkerClickListener(overlay); routeOverlay = overlay; overlay.setData(result.getRouteLines().get(0); overlay.addToMap(); overlay.zoomToSpan(); Override public void onGetDrivingRouteResult(DrivingRouteResult result) if (result = null | result.e

40、rror != SearchResult.ERRORNO.NO_ERROR) Toast.makeText(RoutePlanDemo.this, "抱歉,未找到結果", Toast.LENGTH_SHORT).show(); if (result.error = SearchResult.ERRORNO.AMBIGUOUS_ROURE_ADDR) /起終點或途經點地址有岐義,通過以下接口獲取建議查詢信息 /result.getSuggestAddrInfo() return; if (result.error = SearchResult.ERRORNO.NO_ERROR

41、) nodeIndex = -1; mBtnPre.setVisibility(View.VISIBLE); mBtnNext.setVisibility(View.VISIBLE); route = result.getRouteLines().get(0); DrivingRouteOverlay overlay = new MyDrivingRouteOverlay(mBaidumap); routeOverlay = overlay; mBaidumap.setOnMarkerClickListener(overlay); overlay.setData(result.getRoute

42、Lines().get(0); overlay.addToMap(); overlay.zoomToSpan(); /定制RouteOverly private class MyDrivingRouteOverlay extends DrivingRouteOverlay public MyDrivingRouteOverlay(BaiduMap baiduMap) super(baiduMap); Override public BitmapDescriptor getStartMarker() if (useDefaultIcon) return BitmapDescriptorFacto

43、ry.fromResource(R.drawable.icon_st); return null; Override public BitmapDescriptor getTerminalMarker() if (useDefaultIcon) return BitmapDescriptorFactory.fromResource(R.drawable.icon_en); return null; private class MyWalkingRouteOverlay extends WalkingRouteOverlay public MyWalkingRouteOverlay(BaiduM

44、ap baiduMap) super(baiduMap); Override public BitmapDescriptor getStartMarker() if (useDefaultIcon) return BitmapDescriptorFactory.fromResource(R.drawable.icon_st); return null; Override public BitmapDescriptor getTerminalMarker() if (useDefaultIcon) return BitmapDescriptorFactory.fromResource(R.drawable.icon_en); return null; private class MyTransitRouteOverlay extends TransitRouteOverlay public MyTransitRouteOverlay(BaiduMap baiduMap) super(baiduMap); Override publi

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論