【
申請(qǐng)密鑰AndroidSDK:應(yīng)用程序包名+數(shù)字簽名
As查看數(shù)字簽名:cmd-----cd .android---------keytool -list -v-keystoredebug.keystore------密鑰口令是Android
其中keytool為jdk自帶工具;keystorefile為Android 簽名證書文件
Eclipse查看數(shù)字簽名:windows -> preferance ->android -> build
配置環(huán)境及發(fā)布
Android Studio工程配置方法
在工程app/libs目錄下放入baidumapapi_vX_X_X.jar包
在src/main/目錄下新建jniLibs目錄
91:A3:6B:83:0C:6F:CC:78:89:B8:89:80:40:A3:0A:2A:C5:E6:34:BE
】
【
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.xys.baidumapapplication.MainActivity">
android:id="@+id/bmapView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true"/>
權(quán)限配置:
package="com.xys.baidumapapplication">
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
android:name="com.baidu.lbsapi.API_KEY"
android:value="wNQzIKaz9u7QQ6p734TfshyNFpaDl4gM"/>
添加用于實(shí)現(xiàn)定位的服務(wù)
-->
android:name="com.baidu.location.f"
android:enabled="true"
android:process=":remote">
App Indexing.? See https://g.co/AppIndexing/AndroidStudiofor more information. -->
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version"/>
示例代碼:
public classMainActivityextendsActivity {
/*
*顯示基礎(chǔ)地圖,并提供key是否正確的驗(yàn)證
* */
MapViewmMapView=null;
privateBroadcastReceivermReceiver;
privateBaiduMapmBaiduMap;
@Override
protected voidonCreate(BundlesavedInstanceState) {
super.onCreate(savedInstanceState);
//在使用SDK各組件之前初始化context信息,傳入ApplicationContext
//注意該方法要再setContentView方法之前實(shí)現(xiàn)
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_main);
//獲取地圖控件引用
mMapView= (MapView)findViewById(R.id.bmapView);
//注冊(cè)SDK廣播監(jiān)聽者
IntentFilteriFilter =newIntentFilter();
iFilter.addAction(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_OK);//key正常
iFilter.addAction(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR);//key驗(yàn)證出錯(cuò)
iFilter.addAction(SDKInitializer.SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR);//網(wǎng)絡(luò)出錯(cuò)
mReceiver=newSDKReceiver();
registerReceiver(mReceiver,iFilter);
//可以通過以下幾種方式實(shí)現(xiàn)地圖特殊顯示
mBaiduMap=mMapView.getMap();
//衛(wèi)星地圖
//mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);
//普通地圖
mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
//空白地圖,基礎(chǔ)地圖瓦片將不會(huì)被渲染。在地圖類型中設(shè)置為NONE,將不會(huì)使用流量下載基礎(chǔ)地圖瓦片圖層。使用場(chǎng)景:與瓦片圖層一起使用,節(jié)省流量,提升自定義瓦片圖下載速度。
//mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NONE);
//2.開啟交通圖
//mBaiduMap.setTrafficEnabled(true);
//3.開啟百度城市熱力圖
//mBaiduMap.setBaiduHeatMapEnabled(true);
//4、定義Maker坐標(biāo)點(diǎn),LatLng經(jīng)緯度封裝類
/**
*構(gòu)造方法參數(shù)
* 1、緯度
* 2、經(jīng)度
*/LatLng point =newLatLng(31.384289,121.497907);
//構(gòu)建Marker圖標(biāo)
BitmapDescriptorbitmap = BitmapDescriptorFactory
.fromResource(R.mipmap.icon_marka);
//構(gòu)建MarkerOption,用于在地圖上添加Marker
OverlayOptionsoption =newMarkerOptions()
.position(point)
.icon(bitmap)
.draggable(true);//設(shè)置手勢(shì)拖拽
//在地圖上添加Marker,并顯示,參數(shù)代表圖層對(duì)象
mBaiduMap.addOverlay(option);
//設(shè)置讓地圖的中心點(diǎn)移動(dòng)到某位置
MapStatus.Buildermb =newMapStatus.Builder();
mb.target(point);
mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(mb.build()));
}
@Override
protected voidonDestroy() {
super.onDestroy();
//在activity執(zhí)行onDestroy時(shí)執(zhí)行mMapView.onDestroy(),實(shí)現(xiàn)地圖生命周期管理
mMapView.onDestroy();
}
@Override
protected voidonResume() {
super.onResume();
//在activity執(zhí)行onResume時(shí)執(zhí)行mMapView. onResume (),實(shí)現(xiàn)地圖生命周期管理
mMapView.onResume();
}
@Override
protected voidonPause() {
super.onPause();
//在activity執(zhí)行onPause時(shí)執(zhí)行mMapView. onPause (),實(shí)現(xiàn)地圖生命周期管理
mMapView.onPause();
}
/**
*構(gòu)造廣播監(jiān)聽類,監(jiān)聽SDK key驗(yàn)證以及網(wǎng)絡(luò)異常廣播
*/public classSDKReceiverextendsBroadcastReceiver{
public voidonReceive(Context context,Intent intent) {
String s = intent.getAction();
Log.d("","action:"+ s);
if(s.equals(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR)) {
Toast.makeText(MainActivity.this,"key驗(yàn)證出錯(cuò)!請(qǐng)?jiān)贏ndroidManifest.xml文件中檢查key設(shè)置",Toast.LENGTH_SHORT).show();
}else if(s
.equals(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_OK)) {
Toast.makeText(MainActivity.this,"key驗(yàn)證成功!功能可以正常使用",Toast.LENGTH_SHORT).show();
}else if(s
.equals(SDKInitializer.SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR)) {
Toast.makeText(MainActivity.this,"網(wǎng)絡(luò)出錯(cuò)",Toast.LENGTH_SHORT).show();
}
}
}
}
】
【
1、地圖圖層
什么是地圖圖層?
地圖可以包含一個(gè)或多個(gè)圖層,每個(gè)圖層在每個(gè)級(jí)別都是由若干個(gè)圖塊組成的,它們覆蓋了地圖的整個(gè)表面。
例如您所看到包括街道、興趣點(diǎn)、學(xué)校、公園等內(nèi)容的地圖展現(xiàn)就是一個(gè)圖層。
目前百度地圖SDK所提供的地圖等級(jí)為3-19級(jí),所包含的信息有建筑物、道路、河流、學(xué)校、公園等內(nèi)容。
地圖覆蓋物
所有疊加或覆蓋到地圖的內(nèi)容,我們統(tǒng)稱為地圖覆蓋物
如標(biāo)注、矢量圖形元素(包括:折線、多邊形和圓等)、定位圖標(biāo)等。
覆蓋物擁有自己的地理坐標(biāo),當(dāng)您拖動(dòng)或縮放地圖時(shí),它們會(huì)相應(yīng)的移動(dòng)。
覆蓋物按從下到上層次覆蓋關(guān)系
1、基礎(chǔ)底圖(包括底圖、底圖道路、衛(wèi)星圖等)
2、地形圖圖層(GroundOverlay)
3、熱力圖圖層(HeatMap)
4、實(shí)時(shí)路況圖圖層(BaiduMap.setTrafficEnabled(true);)
5、百度城市熱力圖(BaiduMap.setBaiduHeatMapEnabled(true);)
6、底圖標(biāo)注(指的是底圖上面自帶的那些POI元素)
7、幾何圖形圖層(點(diǎn)、折線、弧線、圓、多邊形)
8、標(biāo)注圖層(Marker),文字繪制圖層(Text)
9、指南針圖層(當(dāng)?shù)貓D發(fā)生旋轉(zhuǎn)和視角變化時(shí),默認(rèn)出現(xiàn)在左上角的指南針)
10、定位圖層(BaiduMap.setMyLocationEnabled(true);)
11、彈出窗圖層(InfoWindow)
12、自定義View(MapView.addView(View);)
2、地圖類型
普通矢量地圖
mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
衛(wèi)星地圖
mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);
實(shí)時(shí)交通圖
當(dāng)前,全國(guó)范圍內(nèi)已支持多個(gè)城市實(shí)時(shí)路況查詢,且會(huì)陸續(xù)開通其他城市。
開啟交通圖:mBaiduMap.setTrafficEnabled(true);
3、覆蓋物
開發(fā)者可根據(jù)自己實(shí)際的業(yè)務(wù)需求,利用標(biāo)注覆蓋物,在地圖指定的位置上添加標(biāo)注信息。
本地覆蓋物
本地覆蓋物的抽象基類:OverlayOptions
標(biāo)注覆蓋物(Marker)
使用步驟
定義Marker坐標(biāo)點(diǎn)
LatLngpoint = new LatLng(39.963175, 116.400244);
構(gòu)建Marker圖標(biāo)
BitmapDescriptorbitmap = BitmapDescriptorFactory.fromResource(R.drawable.icon_marka);
不用時(shí)及時(shí) recycle回收資源 :bitmap.recycle();
構(gòu)建MarkerOption,用于在地圖上添加Marker
OverlayOptionsoption = new MarkerOptions()
.position(point)// Marker的位置
.icon(bitmap);? // Marker的圖標(biāo)
.zIndex(9)? // 設(shè)置marker所在層級(jí)
.draggable(true);? // 設(shè)置手勢(shì)拖拽
在地圖上添加Marker,并顯示
mBaiduMap.addOverlay(option);
設(shè)置Marker的點(diǎn)擊事件
mBaiduMap.setOnMarkerClickListener(OnMarkerClickListener)
手勢(shì)拖拽的標(biāo)注
設(shè)置可拖拽
OverlayOptionsoptions = new MarkerOptions()
.position(pointA)? //設(shè)置marker的位置
.icon(bdA)? //設(shè)置marker圖標(biāo)
.zIndex(9)? //設(shè)置marker所在層級(jí)(默認(rèn):12)
.draggable(true);? //設(shè)置手勢(shì)拖拽
將Marker添加到地圖上
marker= (Marker) (mBaiduMap.addOverlay(options));
設(shè)置marker拖拽的監(jiān)聽
BaiduMap.setOnMarkerDragListener(OnMarkerDragListener)
動(dòng)畫效果的Marker
注:自v3.3.0版本起,SDK提供了給Marker增加動(dòng)畫的能力
實(shí)例化ArrayList,增加動(dòng)畫相關(guān)的圖片資源
通過MarkerOptions的icons設(shè)置動(dòng)畫的一組圖片資源,再通過period設(shè)置多少幀刷新一次圖片資源
幾何圖形覆蓋物
點(diǎn)(Dot): DotOptions
折線(Polyline):PolylineOptions
弧線(Arc):ArcOptions
圓(Circle):CircleOptions
多邊形(Polygon):PolygonOptions
文字覆蓋物:TextOptions
彈出窗覆蓋物:InfoWindow
地形圖圖層:GroundOverlay
搜索覆蓋物
顯示和管理多個(gè)Overlay的基類:OverlayManager
POI本地搜索覆蓋物:PoiOverlay
公交信息覆蓋物:BusLineOverlay
換乘線路覆蓋物:TransitRouteOverlay
駕車路線覆蓋物:DrivingRouteOverlay
步行路線覆蓋物:WalkingRouteOverlay
】
【
POI檢索
POI(Point ofInterest),中文可以翻譯為“興趣點(diǎn)”。在地理信息系統(tǒng)中,一個(gè)POI可以是一棟房子、一個(gè)商鋪、一個(gè)郵筒、一個(gè)公交站等。
百度地圖SDK提供三種類型的POI檢索
周邊檢索
區(qū)域檢索
城市內(nèi)檢索
importcom.xys.utlis.PoiOverlay;
importJava.util.List;
/**
* Created by xuyangsheng on 2015/4/3.
*/public classPointSearchActivityextendsActivity {
/*
*實(shí)現(xiàn)興趣點(diǎn)檢索的功能
*如:搜索上海內(nèi)所有KFC
*或者自身周邊10000米范圍內(nèi)的KFC
*并且將搜索結(jié)果顯示到MapView上
* */
privateMapViewmMapView;
privateBaiduMapmBaiduMap;
privatePoiSearchmPoiSearch;
@Override
protected voidonCreate(BundlesavedInstanceState) {
super.onCreate(savedInstanceState);
//在使用SDK各組件之前初始化context信息,傳入ApplicationContext
//注意該方法要再setContentView方法之前實(shí)現(xiàn)
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_search);
mMapView= (MapView)this.findViewById(R.id.mapView);
Log.i("===","=====onCreate mapView"+mMapView);
mBaiduMap=mMapView.getMap();
//第一步,創(chuàng)建POI檢索實(shí)例
mPoiSearch= PoiSearch.newInstance();
//第二步,設(shè)置POI檢索監(jiān)聽者
mPoiSearch.setOnGetPoiSearchResultListener(newOnGetPoiSearchResultListener(){
/***
*當(dāng)調(diào)用searchInCity,searchNearby,seachInBound方法
*得到搜索結(jié)果之后調(diào)用的方法
*@parampoiResult參數(shù)代表搜索的結(jié)果
*/@Override
public voidonGetPoiResult(PoiResultpoiResult) {
//滿足if條件時(shí),代表地圖成功搜索出結(jié)果
if(poiResult.error==SearchResult.ERRORNO.NO_ERROR){
//將搜索結(jié)果輸出
Log.i("===","======上海市共有的KFC的個(gè)數(shù)為:"+poiResult.getTotalPoiNum());
Listlist = poiResult.getAllPoi();
for(PoiInfo pi : list) {??? Log.i("====","===該poi點(diǎn)的地址信息為:"+ pi.address+"? "+ pi.name);}//將搜索結(jié)果顯示到地圖上//清除地圖上顯示的內(nèi)容mBaiduMap.clear();//創(chuàng)建PoiOverlay,即顯示搜索結(jié)果的圖層/*
*注:如果后期需要設(shè)置poi點(diǎn)的點(diǎn)擊事件,那么就需要通過new
*子類的方式獲取PoiOverlay對(duì)象*如果后期不需要設(shè)置poi點(diǎn)的點(diǎn)擊事件,那么也可以直接* new PoiOverlay對(duì)象* */PoiOverlayoverlay =newMyPointOverlay(mBaiduMap);//設(shè)置overlay可以處理標(biāo)注點(diǎn)擊事件mBaiduMap.setOnMarkerClickListener(overlay);//設(shè)置PoiOverlay數(shù)據(jù)overlay.setData(poiResult);//添加PoiOverlay到地圖中overlay.addToMap();//讓地圖自動(dòng)縮放,滿足讓所有的結(jié)果點(diǎn)都顯示到屏幕上overlay.zoomToSpan();}
}//當(dāng)通過searchPoiDetail方法查詢指定poi點(diǎn)的詳細(xì)信息,得到結(jié)果后運(yùn)行此方法@Overridepublic voidonGetPoiDetailResult(PoiDetailResult poiDetailResult) {??????????????? Log.i("===","======? poi的名稱和營(yíng)業(yè)時(shí)間:"+poiDetailResult.getName()+"? "+poiDetailResult.getShopHours());}
});MapStatus.Builder mb =newMapStatus.Builder();mb.target(newLatLng(31.384289,121.497907));mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(mb.build()));}/**
*處理按鈕點(diǎn)擊事件*/public voidclick(View v){switch(v.getId()) {caseR.id.button://第三步,發(fā)起檢索請(qǐng)求mPoiSearch.searchInCity(newPoiCitySearchOption()
.city("上海")//設(shè)置在哪個(gè)城市范圍內(nèi)進(jìn)行搜索.keyword("KFC")//設(shè)置搜索關(guān)鍵字.pageCapacity(8)//設(shè)置每頁(yè)容量,默認(rèn)為每頁(yè)10條.pageNum(10)//分頁(yè)編號(hào));
break;
caseR.id.button2:mPoiSearch.searchNearby(newPoiNearbySearchOption()
.keyword("蘭州拉面")//搜索關(guān)鍵字.location(newLatLng(31.384289,121.497907))//設(shè)置搜索的中心點(diǎn).radius(10000)//設(shè)置搜索半徑);
break;}
}/**
*創(chuàng)建一個(gè)用于顯示搜索結(jié)果的圖層的子類*/private classMyPointOverlayextendsPoiOverlay{publicMyPointOverlay(BaiduMap baiduMap){super(baiduMap);}//當(dāng)poi點(diǎn)被點(diǎn)擊時(shí)運(yùn)行的方法@Overridepublic booleanonPoiClick(intindex) {super.onPoiClick(index);PoiInfo poiInfo = getPoiResult().getAllPoi().get(index);//可以通過方法搜索指定poi點(diǎn)的詳細(xì)信息mPoiSearch.searchPoiDetail(newPoiDetailSearchOption().poiUid(poiInfo.uid));
return true;}
}@Overrideprotected voidonDestroy() {super.onDestroy();//在activity執(zhí)行onDestroy時(shí)執(zhí)行mMapView.onDestroy(),實(shí)現(xiàn)地圖生命周期管理mMapView.onDestroy();}@Overrideprotected voidonResume() {super.onResume();//在activity執(zhí)行onResume時(shí)執(zhí)行mMapView. onResume (),實(shí)現(xiàn)地圖生命周期管理mMapView.onResume();}@Overrideprotected voidonPause() {super.onPause();//在activity執(zhí)行onPause時(shí)執(zhí)行mMapView. onPause (),實(shí)現(xiàn)地圖生命周期管理mMapView.onPause();}
}
】
【
/**
* Created by xuyangsheng on 2015/4/3.
*用于實(shí)現(xiàn)地圖的路徑規(guī)劃功能
*/public classRoutePlanActivityextendsActivity {
privateMapViewmMapView;
BaiduMapmBaiduMap;
//用于進(jìn)行路徑規(guī)劃的檢索類
privateRoutePlanSearchmSearch;
privateWalkingRouteResultwalkingRouteResult;
@Override
protected voidonCreate(BundlesavedInstanceState) {
super.onCreate(savedInstanceState);
//在使用SDK各組件之前初始化context信息,傳入ApplicationContext
//注意該方法要再setContentView方法之前實(shí)現(xiàn)
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_route);
mMapView= (MapView)findViewById(R.id.bmapViewa);
mBaiduMap=mMapView.getMap();
LatLng point =newLatLng(31.384289,121.497907);
//構(gòu)建Marker圖標(biāo)
BitmapDescriptorbitmap = BitmapDescriptorFactory
.fromResource(R.mipmap.icon_marka);
//構(gòu)建MarkerOption,用于在地圖上添加Marker
OverlayOptionsoption =newMarkerOptions()
.position(point)
.icon(bitmap)
.draggable(true);//設(shè)置手勢(shì)拖拽
//在地圖上添加Marker,并顯示,參數(shù)代表圖層對(duì)象
mBaiduMap.addOverlay(option);
//將地圖中心移動(dòng)到寶山區(qū)
finalMapStatus.Buildermb =newMapStatus.Builder();
mb.target(point);
mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(mb.build()));
//1.創(chuàng)建公交線路規(guī)劃?rùn)z索實(shí)例
mSearch=RoutePlanSearch.newInstance();
//2.設(shè)置公交線路規(guī)劃?rùn)z索監(jiān)聽者
mSearch.setOnGetRoutePlanResultListener(newOnGetRoutePlanResultListener(){
//當(dāng)?shù)玫讲叫新肪€時(shí)運(yùn)行此方法
@Override
public voidonGetWalkingRouteResult(WalkingRouteResultwalkingRouteResult) {
Log.i("===","====? getwalking "+walkingRouteResult.error);
if(walkingRouteResult.error==SearchResult.ERRORNO.NO_ERROR) {
Log.i("===","===本次步行的總距離和預(yù)計(jì)總時(shí)長(zhǎng)為:"+walkingRouteResult.getRouteLines().get(0).getDistance()+"? "+walkingRouteResult.getRouteLines().get(0).getDuration());
RoutePlanActivity.this.walkingRouteResult= walkingRouteResult;
/*
*獲取第一種步行路線
* */
WalkingRouteLineline = walkingRouteResult.getRouteLines().get(0);
//獲取該種步行方式的所有行進(jìn)路段
Liststeps = line.getAllStep();
for(WalkingRouteLine.WalkingStepstep : steps) {
//獲取路段整體指示信息
Log.i("====","=====? "+step.getInstructions());
}
mBaiduMap.clear();
WalkingRouteOverlayoverlay =newMyWalking(mBaiduMap);
mBaiduMap.setOnMarkerClickListener(overlay);
overlay.setData(walkingRouteResult.getRouteLines().get(0));
overlay.addToMap();
overlay.zoomToSpan();
}
}
//當(dāng)獲得公交路線時(shí)運(yùn)行的方法
@Override
public voidonGetTransitRouteResult(TransitRouteResulttransitRouteResult) {
if(transitRouteResult.error==SearchResult.ERRORNO.NO_ERROR) {
Log.i("===","===本次步行的總距離和預(yù)計(jì)總時(shí)長(zhǎng)為:"+transitRouteResult.getRouteLines().get(0).getDistance()+"? "+transitRouteResult.getRouteLines().get(0).getDuration());
TransitRouteLineline = transitRouteResult.getRouteLines().get(0);
Liststeps = line.getAllStep();
for(TransitRouteLine.TransitStepstep : steps) {
//獲取路段整體指示信息
Log.i("====","=====? "+step.getInstructions());
}
mBaiduMap.clear();
TransitRouteOverlayoverlay =newMyTransit(mBaiduMap);
mBaiduMap.setOnMarkerClickListener(overlay);
overlay.setData(transitRouteResult.getRouteLines().get(0));
overlay.addToMap();
overlay.zoomToSpan();
}
}
//當(dāng)獲得駕車路線時(shí)運(yùn)行的方法
@Override
public voidonGetDrivingRouteResult(DrivingRouteResultdrivingRouteResult) {
if(drivingRouteResult.error==SearchResult.ERRORNO.NO_ERROR) {
Log.i("===","===本次步行的總距離和預(yù)計(jì)總時(shí)長(zhǎng)為:"+drivingRouteResult.getRouteLines().get(0).getDistance()+"? "+drivingRouteResult.getRouteLines().get(0).getDuration());
/*
*獲取第一種步行路線
* */
DrivingRouteLineline = drivingRouteResult.getRouteLines().get(0);
//獲取該種步行方式的所有行進(jìn)路段
Liststeps = line.getAllStep();
for(DrivingRouteLine.DrivingStepstep : steps) {
//獲取路段整體指示信息
Log.i("====","=====? "+step.getInstructions());
}
mBaiduMap.clear();
DrivingRouteOverlayoverlay =newMyDriving(mBaiduMap);
mBaiduMap.setOnMarkerClickListener(overlay);
overlay.setData(drivingRouteResult.getRouteLines().get(0));
overlay.addToMap();
overlay.zoomToSpan();
}
}
//當(dāng)獲得騎行路線時(shí)運(yùn)行的方法
@Override
public voidonGetBikingRouteResult(BikingRouteResultbikingRouteResult) {
if(bikingRouteResult.error==SearchResult.ERRORNO.NO_ERROR) {
Log.i("===","===本次步行的總距離和預(yù)計(jì)總時(shí)長(zhǎng)為:"+ bikingRouteResult.getRouteLines().get(0).getDistance()+"? "+bikingRouteResult.getRouteLines().get(0).getDuration());
/*
*獲取第一種步行路線
* */
BikingRouteLineline = bikingRouteResult.getRouteLines().get(0);
//獲取該種步行方式的所有行進(jìn)路段
Liststeps = line.getAllStep();
for(BikingRouteLine.BikingStepstep : steps) {
//獲取路段整體指示信息
Log.i("====","=====? "+step.getInstructions());
}
mBaiduMap.clear();
BikingRouteOverlayoverlay =newMyBiking(mBaiduMap);
mBaiduMap.setOnMarkerClickListener(overlay);
overlay.setData(bikingRouteResult.getRouteLines().get(0));
overlay.addToMap();
overlay.zoomToSpan();
}
}
});
}
public voidclick(View v) {
//通過經(jīng)緯度獲取起點(diǎn)PlanNode對(duì)象
PlanNode start =PlanNode.withLocation(newLatLng(31.384289,121.497907));
//通過城市名稱和地址名稱獲取PlanNode對(duì)象
PlanNode end =PlanNode.withCityNameAndPlaceName("上海","虹口足球場(chǎng)地鐵站");
switch(v.getId()) {
caseR.id.button3://公交
mSearch.transitSearch(newTransitRoutePlanOption()
.city("上海")//設(shè)置城市信息
.from(start)//設(shè)置起點(diǎn)信息
.to(end)//設(shè)置終點(diǎn)信息
.policy(TransitRoutePlanOption.TransitPolicy.EBUS_TIME_FIRST)//設(shè)置換成策略,如時(shí)間最短,步行最少等
);
break;
caseR.id.button4://駕車
mSearch.drivingSearch(newDrivingRoutePlanOption()
.from(start)
.to(end)
.policy(DrivingRoutePlanOption.DrivingPolicy.ECAR_AVOID_JAM)//設(shè)置駕車策略,如時(shí)間最少,避免擁堵等
.trafficPolicy(DrivingRoutePlanOption.DrivingTrafficPolicy.ROUTE_PATH_AND_TRAFFIC)//設(shè)置是否支持路況數(shù)據(jù)
);
break;
caseR.id.button5://步行
mSearch.walkingSearch(newWalkingRoutePlanOption()
.from(start)//設(shè)置起點(diǎn)
.to(end));//設(shè)置終點(diǎn)
break;
caseR.id.button6://騎行
mSearch.bikingSearch(newBikingRoutePlanOption()
.from(start)
.to(end)
);
break;
}
}
//自定義步行圖層的子類
classMyWalkingextendsWalkingRouteOverlay{
publicMyWalking(BaiduMapbaiduMap) {
super(baiduMap);
}
//通過返回值控制起點(diǎn)圖標(biāo)的顯示
@Override
publicBitmapDescriptorgetStartMarker() {
returnBitmapDescriptorFactory.fromResource(R.mipmap.icon_st);
}
//通過返回值控制終點(diǎn)圖標(biāo)的顯示
@Override
publicBitmapDescriptorgetTerminalMarker() {
returnBitmapDescriptorFactory.fromResource(R.mipmap.icon_en);
}
//當(dāng)路徑中的節(jié)點(diǎn)被點(diǎn)擊時(shí)運(yùn)行的方法
@Override
public booleanonRouteNodeClick(inti) {
WalkingRouteLine.WalkingStepselect =walkingRouteResult.getRouteLines().get(0).getAllStep().get(i);
Toast.makeText(RoutePlanActivity.this,"--"+select.getInstructions(),Toast.LENGTH_SHORT).show();
return true;
}
}
classMyTransitextendsTransitRouteOverlay{
/**
*構(gòu)造函數(shù)
*
*@parambaiduMap該TransitRouteOverlay引用的BaiduMap對(duì)象
*/publicMyTransit(BaiduMapbaiduMap) {
super(baiduMap);
}
//通過返回值控制起點(diǎn)圖標(biāo)的顯示
@Override
publicBitmapDescriptorgetStartMarker() {
returnBitmapDescriptorFactory.fromResource(R.mipmap.icon_st);
}
//通過返回值控制終點(diǎn)圖標(biāo)的顯示
@Override
publicBitmapDescriptorgetTerminalMarker() {
returnBitmapDescriptorFactory.fromResource(R.mipmap.icon_en);
}
}
classMyDrivingextendsDrivingRouteOverlay{
/**
*構(gòu)造函數(shù)
*
*@parambaiduMap該TransitRouteOverlay引用的BaiduMap對(duì)象
*/publicMyDriving(BaiduMapbaiduMap) {
super(baiduMap);
}
//通過返回值控制起點(diǎn)圖標(biāo)的顯示
@Override
publicBitmapDescriptorgetStartMarker() {
returnBitmapDescriptorFactory.fromResource(R.mipmap.icon_st);
}
//通過返回值控制終點(diǎn)圖標(biāo)的顯示
@Override
publicBitmapDescriptorgetTerminalMarker() {
returnBitmapDescriptorFactory.fromResource(R.mipmap.icon_en);
}
}
classMyBikingextendsBikingRouteOverlay{
/**
*構(gòu)造函數(shù)
*
*@parambaiduMap該TransitRouteOverlay引用的BaiduMap對(duì)象
*/publicMyBiking(BaiduMapbaiduMap) {
super(baiduMap);
}
//通過返回值控制起點(diǎn)圖標(biāo)的顯示
@Override
publicBitmapDescriptorgetStartMarker() {
returnBitmapDescriptorFactory.fromResource(R.mipmap.icon_st);
}
//通過返回值控制終點(diǎn)圖標(biāo)的顯示
@Override
publicBitmapDescriptorgetTerminalMarker() {
returnBitmapDescriptorFactory.fromResource(R.mipmap.icon_en);
}
}
@Override
protected voidonDestroy() {
super.onDestroy();
//在activity執(zhí)行onDestroy時(shí)執(zhí)行mMapView.onDestroy(),實(shí)現(xiàn)地圖生命周期管理
mMapView.onDestroy();
}
@Override
protected voidonResume() {
super.onResume();
//在activity執(zhí)行onResume時(shí)執(zhí)行mMapView. onResume (),實(shí)現(xiàn)地圖生命周期管理
mMapView.onResume();
}
@Override
protected voidonPause() {
super.onPause();
//在activity執(zhí)行onPause時(shí)執(zhí)行mMapView. onPause (),實(shí)現(xiàn)地圖生命周期管理
mMapView.onPause();
}
}
】
【
/**
* Created by xuyangsheng on 2015/4/4.
*實(shí)現(xiàn)地圖的定位功能
*/public classLocationActivityextendsActivity {
privateMapViewmMapView;
privateBaiduMapmBaiduMap;
private booleanisFirstLoc=true;
privateBitmapDescriptormCurrentMarker;
privateLocationClientmLocationClient;
@Override
protected voidonCreate(BundlesavedInstanceState) {
super.onCreate(savedInstanceState);
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_location);
mMapView= (MapView)this.findViewById(R.id.l_bampView);
mBaiduMap=mMapView.getMap();
//開啟定位圖層
mBaiduMap.setMyLocationEnabled(true);
mCurrentMarker=BitmapDescriptorFactory.fromResource(R.mipmap.icon_marka);
mBaiduMap.setMyLocationConfigeration(newMyLocationConfiguration(
MyLocationConfiguration.LocationMode.COMPASS,true,mCurrentMarker
));
//1、初始化LocationClient類
mLocationClient=newLocationClient(getApplicationContext());//聲明LocationClient
//2、注冊(cè)定位的監(jiān)聽事件
mLocationClient.registerLocationListener(newBDLocationListener(){
/**
*當(dāng)獲取得到定位結(jié)果時(shí),就會(huì)運(yùn)行此方法
*參數(shù)代表當(dāng)前定位到的位置信息
*/@Override
public voidonReceiveLocation(BDLocationbdLocation) {
Log.i("===","=====當(dāng)前定位到的經(jīng)緯度為:"+bdLocation.getLongitude()+" "+bdLocation.getLatitude());
Log.i("===","=====當(dāng)前位置的地址信息為:"+bdLocation.getAddrStr()+" "+bdLocation.getAddress());
MyLocationData? locData =newMyLocationData.Builder()
.accuracy(bdLocation.getRadius())
//此設(shè)置開發(fā)者獲取到的方向信息,順時(shí)針0-360
.direction(100).latitude(bdLocation.getLatitude())
.longitude(bdLocation.getLongitude()).build();
mBaiduMap.setMyLocationData(locData);
if(isFirstLoc){
isFirstLoc=false;
LatLng ll =newLatLng(bdLocation.getLatitude(),
bdLocation.getLongitude());
MapStatus.Builderbuilder =newMapStatus.Builder();
builder.target(ll).zoom(18.0f);
mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));
}
}
});
//3、配置定位SDK參數(shù)
initLocation();
//開始定位
mLocationClient.start();
}
private voidinitLocation(){
LocationClientOption option =newLocationClientOption();
//可選,默認(rèn)高精度,設(shè)置定位模式,高精度、低功耗、僅設(shè)備
option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);
option.setCoorType("bd0911");//可選,默認(rèn)gcj02,設(shè)置返回的定位結(jié)果坐標(biāo)系
intspan =1000;
option.setScanSpan(span);//可選,默認(rèn)0,即僅定位一次,設(shè)置發(fā)起定位請(qǐng)求的間隔需要大于等于1000ms才是有效的
option.setIsNeedAddress(true);//可選,設(shè)置是否需要地址信息,默認(rèn)不需要
option.setOpenGps(true);//可選,默認(rèn)false,設(shè)置是否使用gps
option.setLocationNotify(true);//可選,默認(rèn)false,設(shè)置是否當(dāng)gps有效時(shí)按照1S1次頻率輸出GPS結(jié)果
option.setIsNeedLocationDescribe(true);//可選,默認(rèn)false,設(shè)置是否需要位置語(yǔ)義化結(jié)果,可以在BDLocation.getLocationDescribe里得到,結(jié)果類似于“在北京天安門附近”
option.setIsNeedLocationPoiList(true);//可選,默認(rèn)false,設(shè)置是否需要POI結(jié)果,可以在BDLocation.getPoiList里得到
option.setIgnoreKillProcess(false);//可選,默認(rèn)true,定位SDK內(nèi)部是一個(gè)SERVICE,并放到了獨(dú)立進(jìn)程,設(shè)置是否在stop的時(shí)候殺死這個(gè)進(jìn)程,默認(rèn)不殺死
option.SetIgnoreCacheException(false);//可選,默認(rèn)false,設(shè)置是否收集CRASH信息,默認(rèn)收集
option.setEnableSimulateGps(false);//可選,默認(rèn)false,設(shè)置是否需要過濾gps仿真結(jié)果,默認(rèn)需要
mLocationClient.setLocOption(option);
}
@Override
protected voidonDestroy() {
mLocationClient.stop();//停止定位
mBaiduMap.setMyLocationEnabled(false);//關(guān)閉定位圖層
mMapView.onDestroy();
super.onDestroy();
}
}
】