驾车出行路线规划 最后更新时间: 2021年01月22日
驾车路径规划可以根据起终点和驾车路线的数据,使用 DrivingRouteOverlay 画出驾车路线图层,包括起终点和转弯点。另外也可以自定义起终点和驾车转弯点的图标。
注意:地图SDK V4.1.3版本开始,SDK不再提供 com.amap.api.maps.overlay 包下的 overlay,已在官方demo中开源。
第 1 步,初始化 RouteSearch 对象
routeSearch = new RouteSearch(this);
第 2 步,设置数据回调监听器
routeSearch.setRouteSearchListener(this);
第 3 步,设置搜索参数
通过 DriveRouteQuery(RouteSearch.FromAndTo fromAndTo, int mode, List<LatLonPoint> passedByPoints, List<List<LatLonPoint>> avoidpolygons, String avoidRoad) 设置搜索条件,方法对应的参数说明如下:
- fromAndTo,路径的起点终点;
- mode,路径规划的策略,可选,默认为0-速度优先;详细策略请见驾车策略说明;
- passedByPoints,途经点,可选;
- avoidpolygons,避让区域,可选,支持32个避让区域,每个区域最多可有16个顶点。如果是四边形则有4个坐标点,如果是五边形则有5个坐标点。
- avoidRoad,避让道路,只支持一条避让道路,避让区域和避让道路同时设置,只有避让道路生效。
// fromAndTo包含路径规划的起点和终点,drivingMode表示驾车模式
// 第三个参数表示途经点(最多支持6个),第四个参数表示避让区域(最多支持32个),第五个参数表示避让道路
DriveRouteQuery query = new DriveRouteQuery(fromAndTo, drivingMode, null, null, "");
第 4 步,发送请求
使用类 RouteSearch 的 calculateRideRouteAsyn(RideRouteQuery query) 方法进行骑行规划路径计算。
routeSearch.calculateDriveRouteAsyn(query);
第 5 步,接收数据
在 RouteSearch.OnRouteSearchListener 接口回调方法 void onDriveRouteSearched(DriveRouteResult result, int rCode) 处理驾车规划路径结果。返回的信息中包括:路线的距离、高速费用(仅针对7座以下轿车)、路况情况等等。
说明:
1)可以在回调中解析 result,获取驾车的路径。
2)result.getPaths()可以获取到 DrivePath 列表,驾车路径的详细信息可参考 DrivePath 类。
3)返回结果成功或者失败的响应码。1000为成功,其他为失败(详细信息参见网站开发指南-实用工具-错误码对照表)
public void onDriveRouteSearched(DriveRouteResult result, int rCode) {
//解析result获取算路结果,可参考官方demo
}
驾车策略说明
策略ID | 常量字段 | 策略描述 |
---|---|---|
0 | DRIVING_SINGLE_DEFAULT | 速度优先,不考虑当时路况,返回耗时最短的路线,但是此路线不一定距离最短 |
1 | DRIVING_SINGLE_SAVE_MONEY | 费用优先,不走收费路段,且耗时最少的路线 |
2 | DRIVING_SINGLE_SHORTEST | 距离优先,不考虑路况,仅走距离最短的路线,但是可能存在穿越小路/小区的情况 |
3 | DRIVING_SINGLE_NO_EXPRESSWAYS | 速度优先,不走快速路,例如京通快速路(因为策略迭代,建议使用13) |
4 | DRIVING_SINGLE_AVOID_CONGESTION | 躲避拥堵,但是可能会存在绕路的情况,耗时可能较长 |
5 | DRIVING_MULTI_STRATEGY_FASTEST_SAVE_MONEY_SHORTEST | 多策略(同时使用速度优先、费用优先、距离优先三个策略计算路径)。其中必须说明,就算使用三个策略算路,会根据路况不固定的返回一到三条路径规划信息 |
6 | DRIVING_SINGLE_NO_HIGHWAY | 速度优先,不走高速,但是不排除走其余收费路段 |
7 | DRIVING_SINGLE_NO_HIGHWAY_SAVE_MONEY | 费用优先,不走高速且避免所有收费路段 |
8 | DRIVING_SINGLE_SAVE_MONEY_AVOID_CONGESTION | 躲避拥堵和收费,可能存在走高速的情况,并且考虑路况不走拥堵路线,但有可能存在绕路和时间较长 |
9 | DRIVING_SINGLE_NO_HIGHWAY_SAVE_MONEY_AVOID_CONGESTION | 躲避拥堵和收费,不走高速 |
10 | DRIVING_MULTI_STRATEGY_FASTEST_SHORTEST_AVOID_CONGESTION | 返回结果会躲避拥堵,路程较短,尽量缩短时间,与高德地图的默认策略(也就是不进行任何勾选)一致 |
11 | DRIVING_MULTI_STRATEGY_FASTEST_SHORTEST | 返回三个结果包含:时间最短;距离最短;躲避拥堵(由于有更优秀的算法,建议用10代替) |
12 | DRIVING_MULTI_CHOICE_AVOID_CONGESTION | 返回的结果考虑路况,尽量躲避拥堵而规划路径,与高德地图的“躲避拥堵”策略一致 |
13 | DRIVING_MULTI_CHOICE_NO_HIGHWAY | 返回的结果不走高速,与高德地图“不走高速”策略一致 |
14 | DRIVING_MULTI_CHOICE_SAVE_MONEY | 返回的结果尽可能规划收费较低甚至免费的路径,与高德地图“避免收费”策略一致 |
15 | DRIVING_MULTI_CHOICE_AVOID_CONGESTION_NO_HIGHWAY | 返回的结果考虑路况,尽量躲避拥堵而规划路径,并且不走高速,与高德地图的“躲避拥堵&不走高速”策略一致 |
16 | DRIVING_MULTI_CHOICE_SAVE_MONEY_NO_HIGHWAY | 返回的结果尽量不走高速,并且尽量规划收费较低甚至免费的路径结果,与高德地图的“避免收费&不走高速”策略一致 |
17 | DRIVING_MULTI_CHOICE_AVOID_CONGESTION_SAVE_MONEY | 返回路径规划结果会尽量的躲避拥堵,并且规划收费较低甚至免费的路径结果,与高德地图的“躲避拥堵&避免收费”策略一致 |
18 | DRIVING_MULTI_CHOICE_AVOID_CONGESTION_NO_HIGHWAY_SAVE_MONEY | 返回的结果尽量躲避拥堵,规划收费较低甚至免费的路径结果,并且尽量不走高速路,与高德地图的“避免拥堵&避免收费&不走高速”策略一致 |
19 | DRIVING_MULTI_CHOICE_HIGHWAY | 返回的结果会优先选择高速路,与高德地图的“高速优先”策略一致 |
20 | DRIVING_MULTI_CHOICE_HIGHWAY_AVOID_CONGESTION | 返回的结果会优先考虑高速路,并且会考虑路况躲避拥堵,与高德地图的“躲避拥堵&高速优先”策略一致 |
注意事项
1、使用上述功能需要下载地图SDK,导入搜索功能的jar包。
2、地图SDK V4.1.3版本开始,SDK不再提供 com.amap.api.maps.overlay 包下的 overlay,已在官方demo中开源。