路线规划其实和POI检索差不多,步骤都是一样的,但是有一点,路线规划需要几个依赖库, 需要copy到对应的包下,,将clusterutil和overlayutil这两个包放到com.baidu.mapapi下面,这两个包里有我们一会需要用到的类
//初始化路线规划的实体类
planSearch = RoutePlanSearch.newInstance();
//路线规划的监听
planSearch.setOnGetRoutePlanResultListener(routeListener);
/**
* 路线规划的监听
*/
OnGetRoutePlanResultListener routeListener = new OnGetRoutePlanResultListener() {
@Override
public void onGetWalkingRouteResult(WalkingRouteResult arg0) {
// TODO Auto-generated method stub
}
@Override
public void onGetTransitRouteResult(TransitRouteResult arg0) {
// TODO Auto-generated method stub
}
@Override
public void onGetMassTransitRouteResult(MassTransitRouteResult arg0) {
// TODO Auto-generated method stub
}
@Override
public void onGetIndoorRouteResult(IndoorRouteResult arg0) {
// TODO Auto-generated method stub
}
@Override
public void onGetDrivingRouteResult(DrivingRouteResult result) {
//TODO: 在地图上绘制驾车路线
if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) {
MyToastUtils.show(MainActivity.this, "抱歉,未找到结果");
return;
}
if (result.error == SearchResult.ERRORNO.AMBIGUOUS_ROURE_ADDR) {
//起终点或途经点地址有岐义,通过以下接口获取建议查询信息
//result.getSuggestAddrInfo()
Log.d("baiduMap", "起终点或途经点地址有岐义");
return;
}
//我们调用了搜索方法之后,但是sdk还没有获取到当前客户端是否有使用搜索功能的权限则会出现这个错误
if (result.error == SearchResult.ERRORNO.PERMISSION_UNFINISHED) {
//权限鉴定未完成则再次尝试
Log.d("baiduMap", "权限鉴定未完成,再次尝试");
startSearch(BaiduLocation.getCInstance(getApplicationContext()).getLatLng(),lng);
return;
}
if (result.error == SearchResult.ERRORNO.NO_ERROR) {
routeLine = result.getRouteLines().get(0);
MyDrivingRouteOverlay overlay = new MyDrivingRouteOverlay(map);
map.setOnMarkerClickListener(overlay);
mOverlayManager = overlay;
try {
overlay.setData(routeLine);
overlay.addToMap();
overlay.zoomToSpan();
} catch (Exception e) {
e.printStackTrace();
MyToastUtils.show(MainActivity.this, "路线规划异常");
}
map.setOnMarkerClickListener(overlay);
}
}
@Override
public void onGetBikingRouteResult(BikingRouteResult arg0) {
// TODO Auto-generated method stub
}
};
//
private class MyDrivingRouteOverlay extends DrivingRouteOverlay{
public MyDrivingRouteOverlay(BaiduMap baiduMap) {
super(baiduMap);
}
//起点覆盖物
@Override
public BitmapDescriptor getStartMarker() {
return BitmapDescriptorFactory.fromResource(R.drawable.icon_marka);
}
//终点覆盖物
@Override
public BitmapDescriptor getTerminalMarker() {
return BitmapDescriptorFactory.fromResource(R.drawable.icon_markb);
}
//路线颜色
@Override
public int getLineColor() {
return Color.RED;
}
}
发起路线规划的时候, 只要调用下面这个方法就可以,将起始点和终点的坐标传进去就可以
private void startSearch(LatLng start,LatLng end) {
PlanNode stNode = PlanNode.withLocation(start);
PlanNode enNode = PlanNode.withLocation(end);
planSearch.drivingSearch((new DrivingRoutePlanOption()).from(stNode).to(enNode));
}
我这里只是用的驾车的路线规划,还有步行,骑行等等,意思是一样的,只要换下api就可以