示例中心
功能在线体验
控制台

高德 开发 Android 导航SDK 开发指南 出行路线规划 驾车路线规划

更新时间:2018年02月08日

基本介绍

根据出发地、目的地以及路径策略设置,为用户量身设计出行方案。同时可结合实时交通,帮助用户绕开拥堵路段,提供更贴心、更人性化的驾车出行体验。

注意:路径规划功能需要联网使用。

要实现驾车路径规划,以下两个类您需要了解:

  • 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提供20种驾车策略,分成两种类型:返回单一路径的策略和返回多条路径的策略,对应 PathPlanningStrategy 枚举。

常量字段

说明

DRIVING_DEFAULT

单路径-默认算路模式,速度优先(即:不考虑路况的时间最短),是指在理想路况下,根据道路固有属性(静态权值)计算得到的路线。

DRIVING_SAVE_MONEY

单路径-费用优先(尽量避开收费道路,有可能起始点间必有收费路)。

DRIVING_SHORTEST_DISTANCE

单路径-距离优先(距离最短)。

DRIVING_NO_EXPRESS_WAYS

单路径-普通路优先(不走快速路,包含高速路)

DRIVING_AVOID_CONGESTION

单路径-时间优先 。规避拥堵的路线(考虑实时路况)。

DRIVING_MULTIPLE_PRIORITY_SPEED_COST_DISTANCE

多策略(同时使用速度优先、费用优先、距离优先三个策略计算路径)。 其中必须说明,就算使用三个策略算路,会根据路况不固定的返回一~三条路径规划信息。

DRIVING_SINGLE_ROUTE_AVOID_HIGHSPEED

单路径,【不走高速】

DRIVING_SINGLE_ROUTE_AVOID_HIGHSPEED_COST

单路径,【不走高速&躲避收费】

DRIVING_SINGLE_ROUTE_AVOID_CONGESTION_COST

单路径,【躲避收费&躲避拥堵】

DRIVING_SINGLE_ROUTE_AVOID_HIGHSPEED_COST_CONGESTION

单路径,【不走高速&躲避收费&躲避拥堵】

DRIVING_MULTIPLE_ROUTES_DEFAULT

多路径,时间最短,距离最短(考虑路况)【对应高德地图App不设置任何偏好的策略】

DRIVING_MULTIPLE_SHORTEST_TIME_DISTANCE

多路径,时间最短,距离最短(不考虑路况)

DRIVING_MULTIPLE_ROUTES_AVOID_CONGESTION

多路径,躲避拥堵(考虑路况)【对应高德地图App设置避让用户偏好的策略】

DRIVING_MULTIPLE_ROUTES_AVOID_HIGHSPEED

多路径,不走高速【对应高德地图App不走高速的规划偏好】

DRIVING_MULTIPLE_ROUTES_AVOID_COST

多路径,避免收费【对应高德地图App设置避免收费的规划偏好】

DRIVING_MULTIPLE_ROUTES_AVOID_HIGHSPEED_CONGESTION

多路径,不走高速&躲避拥堵【对应高德地图App同时选中躲避拥堵和不走高速的规划偏好】

DRIVING_MULTIPLE_ROUTES_AVOID_HIGHTSPEED_COST

多路径,不走高速&避免收费【对应高德地图App同时选中避免收费和不走高速的规划偏好】

DRIVING_MULTIPLE_ROUTES_AVOID_COST_CONGESTION

多路径,避免收费&躲避拥堵【对应高德地图App同时选中躲避拥堵和避免收费的规划偏好】

DRIVING_MULTIPLE_ROUTES_AVOID_HIGHSPEED_COST_CONGESTION

多路径,不走高速&避免收费&躲避拥堵【对应高德地图App同时选中躲避拥堵、避免收费和不走高速的规划偏好】

DRIVING_MULTIPLE_ROUTES_PRIORITY_HIGHSPEED

多路径,高速优先【对应高德地图App高速优先的规划偏好】

DRIVING_MULTIPLE_ROUTES_PRIORITY_HIGHSPEED_AVOID_CONGESTION

多路径,高速优先&躲避拥堵【对应高德地图App同时选中躲避拥堵和高速优先的规划偏好】

您可以使用以上表格中的策略进行算路,若您想实现和高德地图一样的 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() {
   //显示路径或开启导航
}
示例中心 功能
在线体验
常见问题