今天项目用到了 路线规划(只是路线规划不含其它) 在此做个记录
首先登录百度地图开放平台 点击打开链接
登记你的应用 然后填写签名的SHA1值 Mac获取签名SHA1值的方法 填写完成就能获取 APP AK
然后在你的清单文件中配置
<meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="申请的key" />
下载SDK 我仅仅下载了这几个
下载完成之后 按照官网提供的集成步骤进行集成
下面给出我的代码 注意代码里面的DrivingRouteOverlay没有在SDK里面 你需要去下载 还有使用这个SDK别忘权限
里面的示例代码去复制 切记切记(当时我找了半天 fk)
/* * @创建者 xw_12138 * @创建时间 2018/4/27 * @描述 */ public class BaiduMapActivity extends AppActivity { private MapView mMapView; private RoutePlanSearch mMSearch; private BaiduMap mBaiduMap; OverlayManager routeOverlay = null; private HttpDialog mDialog; //这是AppActivity抽取方法设置布局 @Override public void setLayout() { setContentView(R.layout.act_map); } //这是AppActivity抽取方法初始化title @Override public void initAll() { setPageTitle("地图"); setPageTitleBackgroundColor(R.color.color_35495E); setPageBackVisibility(View.INVISIBLE); setPageTitleColor(R.color.color_fff); initView(); } private void initView() { mMapView = (MapView) findViewById(R.id.bmapView); //最好设置一个dialog 因为百度地图绘制你设置的点需要时间 mDialog = new HttpDialog(this); mDialog.show(); mBaiduMap = mMapView.getMap(); mMSearch = RoutePlanSearch.newInstance(); mMSearch.setOnGetRoutePlanResultListener(listener); final PlanNode stNode = PlanNode.withCityNameAndPlaceName("上海", "上海"); final PlanNode enNode = PlanNode.withCityNameAndPlaceName("北京", "天安门"); mMSearch.drivingSearch((new DrivingRoutePlanOption()) .from(stNode) .to(enNode)); } class MyDrivingRouteOverlay extends DrivingRouteOverlay { /** * 构造函数 * * @param baiduMap 该DrivingRouteOvelray引用的 BaiduMap */ public MyDrivingRouteOverlay(BaiduMap baiduMap) { super(baiduMap); } //设置起点图片 @Override public BitmapDescriptor getStartMarker() { return BitmapDescriptorFactory.fromResource(R.mipmap.icon_st); } //设置重点图片 @Override public BitmapDescriptor getTerminalMarker() { return BitmapDescriptorFactory.fromResource(R.mipmap.icon_en); } //设置路线颜色 @Override public int getLineColor() { return Color.parseColor("#EEB422"); } } OnGetRoutePlanResultListener listener = new OnGetRoutePlanResultListener() { @Override public void onGetDrivingRouteResult(DrivingRouteResult result) { mDialog.dismiss(); if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) { Toast.makeText(BaiduMapActivity.this, "抱歉,未找到结果", Toast.LENGTH_SHORT) .show(); } if (result.error == SearchResult.ERRORNO.AMBIGUOUS_ROURE_ADDR) { return; } if (result.error == SearchResult.ERRORNO.NO_ERROR) { DrivingRouteOverlay overlay = new MyDrivingRouteOverlay(mBaiduMap); routeOverlay = overlay; overlay.setData(result.getRouteLines().get(0)); overlay.addToMap(); // 将所有Overlay 添加到地图上 overlay.zoomToSpan(); // 缩放地图,使所有Overlay都在合适的视野内 } } @Override public void onGetWalkingRouteResult(WalkingRouteResult walkingRouteResult) { } @Override public void onGetTransitRouteResult(TransitRouteResult transitRouteResult) { } @Override public void onGetMassTransitRouteResult(MassTransitRouteResult massTransitRouteResult) { } @Override public void onGetIndoorRouteResult(IndoorRouteResult indoorRouteResult) { } @Override public void onGetBikingRouteResult(BikingRouteResult bikingRouteResult) { } }; @Override protected void onStart() { super.onStart(); } @Override public void onResume() { super.onResume(); if (null != mMapView) mMapView.onResume(); } @Override public void onPause() { super.onPause(); if (null != mMapView) mMapView.onPause(); } @Override protected void onDestroy() { super.onDestroy(); if (null != mMSearch) mMSearch.destroy(); if (null != mMapView) mMapView.onDestroy(); } }
然后打开就能看到效果了
补充一句
获取两点之间距离 在onGetDrivingRouteResult (单位 公里)
int duration = result.getRouteLines().get(0).getDistance(); DecimalFormat df = new DecimalFormat("0.00"); String distance = df.format((float) duration / 1000);