天天看点

百度地图3.0

前段时间用到和学习了百度地图,很早就像总结一下,可是太懒,拖到了新年的最后一天,

百度地图3.0

百度地图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() {
					}
				});
	}
           

继续阅读