高德 开发 Android 导航SDK 开发指南 出行路线规划 驾车路线规划
更新时间:2018年12月06日
基本介绍
根据出发地、目的地以及路径策略设置,为用户量身设计出行方案。同时可结合实时交通,帮助用户绕开拥堵路段,提供更贴心、更人性化的驾车出行体验。
注意:路径规划功能需要联网使用。
要实现驾车路径规划,以下两个类您需要了解:
- AMapNavi 是导航对外控制类,提供计算规划路线、偏航以及拥堵重新算路等方法。注意:AMapNavi 不支持多实例。
- AMapNaviListener 导航事件监听,提供导航过程中的事件(如:路径规划成功/失败、拥堵重新算路、到达目的地等)回调接口。
说明:
1、起点和终点的坐标可通过多种方式获取,如:使用坐标拾取器查询您需要的点的坐标;还可以通过地图SDK的搜索模块中的POI搜索查询兴趣点,作为起点或者终点。
2、从导航 SDK V5.0.0 版本起最多支持设置 16 个途经点,注意:导航组件最多支持设置3个途径点。
3、提供两种驾车路线规划的方法,如下表:
方法名 | 参数说明 | 返回值说明 | 方法效果 |
calculateDriveRoute |
to:终点坐标; wayPoints:途经点坐标; strategy:路径的计算策略; | boolean,表示路径是否计算成功 | 不带起点的驾车路径规划。 |
calculateDriveRoute |
from:起点坐标; to:终点坐标; wayPoints:途经点坐标; strategy:路径的计算策略; | boolean,表示路径是否计算成功 | 带起点的驾车路径规划。 |
4、无论起点坐标还是终点坐标,均可设置多个。当坐标以列表形式存放时,列表的尾点为实际导航点(起点或终点),其他坐标点为辅助信息,带有方向性,可有效避免算路到马路的另一侧。
5、推荐使用带起点的路径规划方法,因为不带起点的路径规划方法会因定位失败导致使用默认在北京的位置,从而使算路结果异常。
6、路径的计算策略包含单一策略和多策略,通过多策略,可计算出多条规划路径(最多3条),多路径通过 onCalculateMultipleRoutesSuccess(int[] routeIds) 回调。
策略说明
导航SDK提供21种驾车策略,分成两种类型:返回单一路径的策略和返回多条路径的策略,对应 PathPlanningStrategy 枚举。
策略ID | 常量字段 | 说明 |
---|---|---|
0 | DRIVING_DEFAULT | 速度优先,不考虑当时路况,返回耗时最短的路线,但是此路线不一定距离最短 |
1 | DRIVING_SAVE_MONEY | 费用优先,不走收费路段,且耗时最少的路线 |
2 | DRIVING_SHORTEST_DISTANCE | 距离优先,不考虑路况,仅走距离最短的路线,但是可能存在穿越小路/小区的情况 |
3 | DRIVING_NO_EXPRESS_WAYS | 速度优先,不走快速路,例如京通快速路(因为策略迭代,建议使用13) |
4 | DRIVING_AVOID_CONGESTION | 躲避拥堵,但是可能会存在绕路的情况,耗时可能较长 |
5 | DRIVING_MULTIPLE_PRIORITY_SPEED_COST_DISTANCE | 多策略(同时使用速度优先、费用优先、距离优先三个策略计算路径)。其中必须说明,就算使用三个策略算路,会根据路况不固定的返回一到三条路径规划信息 |
6 | DRIVING_SINGLE_ROUTE_AVOID_HIGHSPEED | 速度优先,不走高速,但是不排除走其余收费路段 |
7 | DRIVING_SINGLE_ROUTE_AVOID_HIGHSPEED_COST | 费用优先,不走高速且避免所有收费路段 |
8 | DRIVING_SINGLE_ROUTE_AVOID_CONGESTION_COST | 躲避拥堵和收费,可能存在走高速的情况,并且考虑路况不走拥堵路线,但有可能存在绕路和时间较长 |
9 | DRIVING_SINGLE_ROUTE_AVOID_HIGHSPEED_COST_CONGESTION | 躲避拥堵和收费,不走高速 |
10 | DRIVING_MULTIPLE_ROUTES_DEFAULT | 返回结果会躲避拥堵,路程较短,尽量缩短时间,与高德地图的默认策略(也就是不进行任何勾选)一致 |
11 | DRIVING_MULTIPLE_SHORTEST_TIME_DISTANCE | 返回三个结果包含:时间最短;距离最短;躲避拥堵(由于有更优秀的算法,建议用10代替) |
12 | DRIVING_MULTIPLE_ROUTES_AVOID_CONGESTION | 返回的结果考虑路况,尽量躲避拥堵而规划路径,与高德地图的“躲避拥堵”策略一致 |
13 | DRIVING_MULTIPLE_ROUTES_AVOID_HIGHSPEED | 返回的结果不走高速,与高德地图“不走高速”策略一致 |
14 | DRIVING_MULTIPLE_ROUTES_AVOID_COST | 返回的结果尽可能规划收费较低甚至免费的路径,与高德地图“避免收费”策略一致 |
15 | DRIVING_MULTIPLE_ROUTES_AVOID_HIGHSPEED_CONGESTION | 返回的结果考虑路况,尽量躲避拥堵而规划路径,并且不走高速,与高德地图的“躲避拥堵&不走高速”策略一致 |
16 | DRIVING_MULTIPLE_ROUTES_AVOID_HIGHTSPEED_COST | 返回的结果尽量不走高速,并且尽量规划收费较低甚至免费的路径结果,与高德地图的“避免收费&不走高速”策略一致 |
17 | DRIVING_MULTIPLE_ROUTES_AVOID_COST_CONGESTION | 返回路径规划结果会尽量的躲避拥堵,并且规划收费较低甚至免费的路径结果,与高德地图的“躲避拥堵&避免收费”策略一致 |
18 | DRIVING_MULTIPLE_ROUTES_AVOID_HIGHSPEED_COST_CONGESTION | 返回的结果尽量躲避拥堵,规划收费较低甚至免费的路径结果,并且尽量不走高速路,与高德地图的“避免拥堵&避免收费&不走高速”策略一致 |
19 | DRIVING_MULTIPLE_ROUTES_PRIORITY_HIGHSPEED | 返回的结果会优先选择高速路,与高德地图的“高速优先”策略一致 |
20 | DRIVING_MULTIPLE_ROUTES_PRIORITY_HIGHSPEED_AVOID_CONGESTION | 返回的结果会优先考虑高速路,并且会考虑路况躲避拥堵,与高德地图的“躲避拥堵&高速优先”策略一致 |
您可以使用以上表格中的策略进行算路,若您想实现和高德地图一样的 checkbox 选项,那么建议您直接使用我们封装的 AMapNavi.strategyConvert()方法进行获取策略值。
方法名 | 参数说明 | 返回值说明 | 方法效果 | 备注 |
---|---|---|---|---|
strategyConvert | congestion:躲避拥堵 avoidhightspeed:不走高速 cost:避免收费 hightspeed:高速优先 multiple:多路径 | int | 进行算路策略转换,将传入的特定规则转换成 PathPlanningStrategy 的枚举值。 | 不走高速与高速优先不能同时为true。 高速优先与避免收费不能同时为true。 |
使用说明
第 1 步,初始化
获取 AMapNavi 对象,并设置监听。
//获取AMapNavi实例
mAMapNavi = AMapNavi.getInstance(getApplicationContext());
//添加监听回调,用于处理算路成功
mAMapNavi.addAMapNaviListener(this);
第 2 步,计算驾车规划路线
当 AMapNavi 对象初始化成功后,会进入 onInitNaviSuccess 回调函数,在该回调函数中调用路径规划方法计算路径。
@Override
public void onInitNaviSuccess() {
/**
* 方法:
* int strategy=mAMapNavi.strategyConvert(congestion, avoidhightspeed, cost, hightspeed, multipleroute);
* 参数:
* @congestion 躲避拥堵
* @avoidhightspeed 不走高速
* @cost 避免收费
* @hightspeed 高速优先
* @multipleroute 多路径
*
* 说明:
* 以上参数都是boolean类型,其中multipleroute参数表示是否多条路线,如果为true则此策略会算出多条路线。
* 注意:
* 不走高速与高速优先不能同时为true
* 高速优先与避免收费不能同时为true
*/
int strategy=0;
try {
strategy = mAMapNavi.strategyConvert(true, false, false, false, false);
} catch (Exception e) {
e.printStackTrace();
}
mAMapNavi.calculateDriveRoute(sList, eList, mWayPointList, strategy);
}
第 3 步,处理结果
当驾车路线规划成功时,若是单一策略,会进 onCalculateRouteSuccess 回调,若是多策略,会进 nCalculateMultipleRoutesSuccess(int[] routeIds) 回调,在该回调函数中,可以进行规划路线显示或开始导航。
@Override
public void onCalculateRouteSuccess() {
//显示路径或开启导航
}