其他文章:
安卓百度离线地图的下载以及使用
安卓百度地图(一)定位功能的实现、周边POI的检索
安卓百度地图(二)地图显示以及离线地图的下载使用
安卓百度地图(三)绘制点、线等图层信息
安卓百度地图(四)城市,周边,区域检索
安卓百度地图(六)鹰眼轨迹的上传,历史轨迹的显示
安卓百度地图(七)地理围栏的建立与使用
本文就百度地图的路线规划功能加以收集整理
一 路线规划简介
百度地图路线规划分为步行线规划,行车路线规划,骑行路线规划,公交路线规划
二 路线规划
2.1. 创建线路规划检索实例
mSearch = RoutePlanSearch.newInstance();
2.2 设置线路规划检索监听者
mSearch.setOnGetRoutePlanResultListener(listener);
2.3 设置线路规划起点、终点信息
传入地名
PlanNode stNode = PlanNode.withCityNameAndPlaceName("北京", "西二旗地铁站");
PlanNode enNode = PlanNode.withCityNameAndPlaceName("北京", "百度科技园");
传入坐标
PlanNode stNode = PlanNode.withLocation(loc_start);
PlanNode enNode = PlanNode.withLocation(loc_end);
2.4 发起线路规划
2.4.1 发起步行线路规划
mSearch.walkingSearch((new WalkingRoutePlanOption())
.from(stNode)
.to(enNode));
2.4.2 骑行路线规划
通过设置骑行类型ridingType()
即可实现电动车和普通自行车切换,默认为0普通骑行模式,旧版用户使用普通自行车模式不受影响。 电动车骑行路线规划,规避电动车禁行路段,避免罚款。 电动车骑行路线规划倾向于走大路,方便寻路,适于快速通行。
//通过设ridingType,可以区分普通自行车,和电动车线路
ridingType(int ridingType)
mSearch.bikingSearch((new BikingRoutePlanOption())
.from(stNode)
.to(enNode));
2.4.3 驾车线路规划
mSearch.drivingSearch((new DrivingRoutePlanOption())
.from(stNode)
.to(enNode));
2.4.4 公交线路规划
mSearch.transitSearch(
new TransitRoutePlanOption()
.from(stNode)
.to(enNode));
2.5 设置线路规划检索监听者;
OnGetRoutePlanResultListener listener = new OnGetRoutePlanResultListener() {
//获取步行线路规划结果
@Override
public void onGetWalkingRouteResult(WalkingRouteResult result) {
}
//获取综合公共交通线路规划结果
@Override
public void onGetTransitRouteResult(TransitRouteResult transitRouteResult) {
}
//获取**跨城**综合公共交通线路规划结果
@Override
public void onGetMassTransitRouteResult(MassTransitRouteResult massTransitRouteResult) {
}
//获取驾车线路规划结果
@Override
public void onGetDrivingRouteResult(DrivingRouteResult drivingRouteResult) {
}
//室内路线规划结果
@Override
public void onGetIndoorRouteResult(IndoorRouteResult indoorRouteResult) {
}
//获取普通骑行路规划结果
@Override
public void onGetBikingRouteResult(BikingRouteResult bikingRouteResult) {
}
};
6 显示线路
先下载官方提供的工具类mapapi,将内部的overlayutil包直接放入自己的java代码中
示例驾车路线规划示例
//绘制路线
if (drivingRouteResult == null || drivingRouteResult.error != SearchResult.ERRORNO.NO_ERROR) {
Toast.makeText(MapRoadActivity.this, "抱歉,未找到结果", Toast.LENGTH_SHORT).show();
}
if (drivingRouteResult.error == SearchResult.ERRORNO.AMBIGUOUS_ROURE_ADDR) {
// 起终点或途经点地址有岐义,通过以下接口获取建议查询信息
drivingRouteResult.getSuggestAddrInfo();
return;
}
if (drivingRouteResult.error == SearchResult.ERRORNO.NO_ERROR) {
if (drivingRouteResult.getRouteLines().size() >= 1) {
MyDrivingRouteOverlay overlay = new MyDrivingRouteOverlay(mBaiduMap);
mBaiduMap.setOnMarkerClickListener(overlay);
overlay.setData(drivingRouteResult.getRouteLines().get(0));
overlay.addToMap();
overlay.zoomToSpan();
} else {
Log.d("route result", "结果数<0");
return;
}
}
// 定制RouteOverly,自定义起点终点图片
boolean useDefaultIcon = false;//使用默认ICON
private class MyDrivingRouteOverlay extends DrivingRouteOverlay {
public MyDrivingRouteOverlay(BaiduMap baiduMap) {
super(baiduMap);
}
@Override
public BitmapDescriptor getStartMarker() {
if (useDefaultIcon) {
return BitmapDescriptorFactory.fromResource(R.drawable.icon_st);
}
return null;
}
@Override
public BitmapDescriptor getTerminalMarker() {
if (useDefaultIcon) {
return BitmapDescriptorFactory.fromResource(R.drawable.icon_en);
}
return null;
}
}
7.释放检索实例;
mSearch.destory();
注意:具体错误码,请查看百度地图错误码
本文主要做于收集整理笔记使用,关于文章的源码,请移步我的GitHub
网友评论