前段时间用到和学习了百度地图,很早就像总结一下,可是太懒,拖到了新年的最后一天,
百度地图3.0相较于之前的API有所差差别,先导入给出Demo
申请key,添加架包在百度地图API中都可以找到,这里就不啰嗦了
我认为3.0的不用就是获取地图管理器的方法不同了,也不需要必须在setContentView方法之前初始化管理器
mMapView = (MapView) findViewById(R.id.bmapView);
mBaiduMap = mMapView.getMap();
在Activity结束时,mapView需要为空
@Override
protected void onDestroy() {
super.onDestroy();
mMapView.onDestroy();
CloudManager.getInstance().destroy();
}
@Override
protected void onPause() {
super.onPause();
mMapView.onPause();
}
@Override
protected void onResume() {
super.onResume();
mMapView.onResume();
}
下面是一些基本配置
// 隐藏地图缩放按钮
mMapView.showZoomControls(false);
// 准备标识地址图标
descriptor = BitmapDescriptorFactory.fromBitmap(BitmapFactory.decodeResource(getResources(),
R.drawable.map_store_mark));
// 获取地图管理器
mBaiduMap = mMapView.getMap();
// 普通地图模式
mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
// 设置地图最初缩放比例
MapStatusUpdate msu = MapStatusUpdateFactory.zoomTo(17.0f);
// 设置地图显示坐标
MapStatusUpdate newLatLng = MapStatusUpdateFactory.newLatLng(new LatLng(Double.valueOf(latitude), Double
.valueOf(longitude)));
mBaiduMap.setMapStatus(msu);
mBaiduMap.setMapStatus(newLatLng);
显示标识图层
// add marker overlay
LatLng latLng = new LatLng(Double.valueOf(latitude), Double.valueOf(longitude));
OverlayOptions oo = new MarkerOptions().position(latLng).icon(descriptor).zIndex(9).draggable(true);
mMarker = (Marker) (mBaiduMap.addOverlay(oo));
Button button = new Button(getApplicationContext());
button.setBackgroundResource(R.drawable.map_text_bg);
button.setText(name + "\n" + address + "\n" + workingTime);
button.setTextColor(getResources().getColor(R.color.white));
LatLng ll = mMarker.getPosition();
mInfoWindow = new InfoWindow(BitmapDescriptorFactory.fromView(button), ll, -47, null);
mBaiduMap.showInfoWindow(mInfoWindow);
定位
// 定位图层显示模式:普通
mCurrentMode = LocationMode.NORMAL;
mBaiduMap.setMyLocationConfigeration(new MyLocationConfiguration(mCurrentMode, true, null));
// 开启定位图层
mBaiduMap.setMyLocationEnabled(true);
// 定位初始化
mLocClient = new LocationClient(this);
mLocClient.registerLocationListener(new MyLocationListenner());
LocationClientOption option = new LocationClientOption();
option.setOpenGps(true);// 打开gps
option.setCoorType("bd09ll"); // 设置坐标类型
option.setScanSpan(1000);
mLocClient.setLocOption(option);
mLocClient.start();
定位监听
/**
* 定位SDK监听函数
*/
public class MyLocationListenner implements BDLocationListener {
@Override
public void onReceiveLocation(BDLocation location) {
// map view 销毁后不在处理新接收的位置
if (location == null || mMapView == null)
return;
MyLocationData locData = new MyLocationData.Builder().accuracy(location.getRadius())
// 此处设置开发者获取到的方向信息,顺时针0-360
.direction(100).latitude(location.getLatitude()).longitude(location.getLongitude()).build();
mBaiduMap.setMyLocationData(locData);
if (isFirstLoc) {
isFirstLoc = false;
startLatLng = new LatLng(location.getLatitude(), location.getLongitude());
Log.i("--------------定位Latitude=" + location.getLatitude());
Log.i("--------------定位Longitude=" + location.getLongitude());
}
}
public void onReceivePoi(BDLocation poiLocation) {
}
}
初始化导航引擎
BaiduNaviManager.getInstance().initEngine(NearShopMapActivity.this, getSdcardDir(), mNaviEngineInitListener,
new LBSAuthManagerListener() {
@Override
public void onAuthResult(int status, String msg) {
String str = null;
if (0 == status) {
str = "key校验成功!";
} else {
str = "key校验失败, " + msg;
}
// Toast.makeText(NearShopMapActivity.this, str,
// Toast.LENGTH_SHORT).show();
Log.i("==========导航初始化=====" + str);
}
});
开启导航(调用百度地图APP或者使用导航SDK)
endLatLng = new LatLng(Double.valueOf(latitude), Double.valueOf(longitude));
// 构建 导航参数
NaviPara para = new NaviPara();
para.startPoint = startLatLng;
para.startName = "从这里开始";
para.endPoint = endLatLng;
para.endName = "到这里结束";
if (isAvilible("com.baidu.BaiduMap")) {
try {
BaiduMapNavigation.openBaiduMapNavi(para, NearShopMapActivity.this);
} catch (BaiduMapAppNotSupportNaviException e) {
e.printStackTrace();
// AlertDialog.Builder builder = new
// AlertDialog.Builder(NearShopMapActivity.this);
// builder.setMessage("您尚未安装百度地图app或app版本过低,点击确认安装?");
// builder.setTitle("提示");
// builder.setPositiveButton("取消", null);
// builder.setNegativeButton("确定", new
// DialogInterface.OnClickListener() {
// @Override
// public void onClick(DialogInterface dialog, int
// which) {
// dialog.dismiss();
// BaiduMapNavigation.getLatestBaiduMapApp(NearShopMapActivity.this);
// }
// });
// builder.create().show();
}
} else {
mStartPoint = new BNaviPoint(startLatLng.longitude, startLatLng.latitude, "起点",
BNaviPoint.CoordinateType.GCJ02);
mEndPoint = new BNaviPoint(endLatLng.longitude, endLatLng.latitude, "终点",
BNaviPoint.CoordinateType.GCJ02);
mViaPoints = new ArrayList<BNaviPoint>();
if (mViaPoints.size() == 0) {
launchNavigator();
} else {
launchNavigatorViaPoints();
}
}
使用导航SDK
/**
* 启动GPS导航. 前置条件:导航引擎初始化成功
*/
private void launchNavigator() {
// 这里给出一个起终点示例,实际应用中可以通过POI检索、外部POI来源等方式获取起终点坐标
BaiduNaviManager.getInstance().launchNavigator(NearShopMapActivity.this, startLatLng.latitude,
startLatLng.longitude, "起点", endLatLng.latitude, endLatLng.longitude, "终点",
NE_RoutePlan_Mode.ROUTE_PLAN_MOD_MIN_TIME, // 算路方式
true, // 真实导航
BaiduNaviManager.STRATEGY_FORCE_ONLINE_PRIORITY, // 在离线策略
new OnStartNavigationListener() { // 跳转监听
@Override
public void onJumpToNavigator(Bundle configParams) {
Intent intent = new Intent(NearShopMapActivity.this, BNavigatorActivity.class);
intent.putExtras(configParams);
startActivity(intent);
}
@Override
public void onJumpToDownloader() {
}
});
}