高德地图开发Android 导航SDK开发指南专业导航—导航实时数据获取

高德地图开发Android 导航SDK开发指南专业导航—导航实时数据获取

导航实时数据获取 最后更新时间: 2021年01月22日

基本介绍

在实际驾车导航中,导航SDK会通过AMapNaviListener、ParallelRoadListener、AimlessModeListener这些监听器实时的透出导航信息与数据,可帮助您进行UI的定制化开发,是HUD和智能硬件的解决方案。骑行、步行与驾车一致,同样可以通过AMapNaviListener来获取导航事件与数据。

注册一般导航事件与数据监听(驾车、骑行、步行通用):

Java

 AMapNavi mAMapNavi = AMapNavi.getInstance(mContext);
 // 1.注册一般导航事件与数据监听
 mAMapNavi.addAMapNaviListener(new AMapNaviListener() {
        // 导航管理类初始化成功回调
        @Override
        public void onInitNaviSuccess() {
        }
        // 开始导航回调
        @Override
        public void onStartNavi(int type) {
        }
     
            ...
 });

注册平行路数据监听(驾车): 

Java

AMapNavi mAMapNavi = AMapNavi.getInstance(mContext);
 // 注册平行路数据监听
 mAMapNavi.addParallelRoadListener(new ParallelRoadListener() {
     // 平行路信息变化回调
     @Override
     public void notifyParallelRoad(AMapNaviParallelRoadStatus roadStatus) {
         
     }
 });

注册巡航模式数据监听(驾车): 

Java

AMapNavi mAMapNavi = AMapNavi.getInstance(mContext); 
 // 注册巡航模式数据监听
 mAMapNavi.addAimlessModeListener(new AimlessModeListener() {
     // 巡航道路设施信息更新回调
     @Override
     public void onUpdateTrafficFacility(AMapNaviTrafficFacilityInfo[] infos) {

     }
     
     // 巡航电子眼信息更新回调
     @Override
     public void onUpdateAimlessModeElecCameraInfo(AMapNaviTrafficFacilityInfo[] cameraInfo) {

     }

     // 巡航统计信息更新回调
     @Override
     public void updateAimlessModeStatistics(AimLessModeStat aimLessModeStat) {

     }

     // 巡航拥堵信息更新回调
     @Override
     public void updateAimlessModeCongestionInfo(AimLessModeCongestionInfo aimLessModeCongestionInfo) {

     }
 });

NaviInfo信息

NaviInfo主要指的是导航信息,比如当前道路名称、距离终点的时间和距离、没有避开的设施信息等。可通过AMapNaviListener中的onNaviInfoUpdate 回调接口获取NaviInfo对象。自定义导航视图AMapNaviView,以及导航组件中导航页顶部诱导面板、底部面板的信息,就是主要从该回调获取的。 

Java

/**
     * 导航引导信息回调。
     *
     * @param naviInfo 导航信息类对象。
     */
    void onNaviInfoUpdate(NaviInfo naviInfo);

路口放大图

路口放大图包含了显示和隐藏两个回调,又根据放大图类别为实景图还是模型图分为两套,一共4个回调,均位于AMapNaviListener中,仅对驾车有效,如下: 

Java

/**
     * 显示路口放大图回调(实景图)。
     * 
     * @param aMapNaviCross 路口放大图类,可以获得此路口放大图bitmap
     * @since 1.5.0
     */
    void showCross(AMapNaviCross aMapNaviCross);

    /**
     * 关闭路口放大图回调(实景图)。
     * 
     * @since 1.5.0
     */
    void hideCross();

    /**
     * 显示路口放大图回调(模型图)。
     * 
     * @param modelCross 模型图数据类,可以获取绘制模型图需要的矢量数据
     * @since 5.0.0
     */
    void showModeCross(AMapModelCross modelCross);

    /**
     * 关闭路口放大图回调(模型图)。
     *
     * @since 5.0.0
     */
    void hideModeCross();


车道线

车道线包含了显示和隐藏两个回调,位于AMapNaviListener中,如下: 

Java

/**
     * 显示车道信息回调
     * 
     * @param laneInfo 车道信息,可获得当前道路信息,可用于用户使用自己的素材完全自定义显示。
     * @since 6.0.0
     */
    void showLaneInfo(AMapLaneInfo laneInfo);

    /**
     * 隐藏车道信息回调
     * 
     * @since 1.5.0
     */
    void hideLaneInfo();

转向图标

导航过程中路口的转向图标信息,可从NaviInfo中获取,NaviInfo的获取上面已经介绍不再赘述,NaviInfo中转向图标相关的接口有2个,一个是直接获取转向图标的bitmap,另一个是获取转向图标类型的枚举值,可用于自定义转向图标的绘制。图标bitmap带有路网信息,更加直观。

NaviInfo中的接口: 

Java

/**
     * 获取转向图标bitmap,可能返回为空,返回空的情况,请使用getIconType来填充。
     * 
     * @return  转向图标bitmap
     * @since 6.4.0
     */
    public Bitmap getIconBitmap();

    /**
     * 获取导航转向图标类型枚举
     *
     * @return 转向图标枚举。含义参见{@link com.amap.api.navi.enums.IconType}
     */
    public int getIconType();

路况信息

路况信息涉及的接口一共有2个,一个主动接口,位于路线类AMapNaviPath中的getTrafficStatuses ,返回的是当前路线的即时路况信息,可用来绘制光柱图。另一个为被动回调,为AMapNaviListener中的onTrafficStatusUpdate,当路线上的路况发生变化时会触发回调。

AMapNaviPath中的主动接口: 

Java

/**
     * 获取当前路线的路况信息
     * 
     * @return 交通状态对象集合
     */
    public List<AMapTrafficStatus> getTrafficStatuses();

 AMapNaviListener中的被动接口:

Java

 /**
     * 当路线的路况信息有更新时的回调。
     */
    void onTrafficStatusUpdate();

注意:为了获取更加实时准确的路况信息,建议设置AMapNaviListener监听,在收到onTrafficStatusUpdate回调后,通过AMapNavi的getNaviPath或getNaviPaths接口拿到最新的路线对象,然后通过路线对象的getTrafficStatuses接口获取实时的路况。  

电子眼信息

电子眼信息包含电子眼的类型、是否限速、经纬度坐标、当前自车位置到电子眼的距离等信息。位于AMapNaviListener中。 

Java

/**
     * 导航过程中的摄像头信息回调函数
     * 
     * @param infoArray 摄像头对象数组
     * @since 5.0.0
     */
    void updateCameraInfo(AMapNaviCameraInfo[] infoArray);

区间测速电子眼信息

导航SDK从v6.0.0开始,透出了区间测速电子眼信息,包含了自车位置和区间测速路段的位置关系、一些实时更新的动态信息等。 

Java

 /**
     * 导航过程中的区间测速信息回调函数
     * 
     * @param startCameraInfo  区间测速起点信息
     * @param endCameraInfo    区间测速终点信息
     * @param status           具体类型可参考{@link com.amap.api.navi.enums.CarEnterCameraStatus}
     * @since 6.0.0
     */
    void updateIntervalCameraInfo(AMapNaviCameraInfo startCameraInfo, AMapNaviCameraInfo endCameraInfo, int status);

服务区和收费站信息

导航SDK从v5.0.0开始,透出了服务区和收费站信息,包含了服务区的类型、名称、经纬度坐标、自车位置到服务区的距离,可用于一些自定义的信息展示。 

Java

/**
     * 服务区信息回调函数
     * 
     * @param infoArray 服务区对象数组,参考 AMapServiceAreaInfo 类
     * @since 5.0.0
     */
    void onServiceAreaUpdate(AMapServiceAreaInfo[] infoArray);

交通事件

导航SDK从v6.2.0开始,提供了路线上交通事件信息的透出能力,包含了拥堵区域、限行区域、禁行区域、道路封闭等情况的躲避通知。还提供了GPS信号变弱的通知。可从AMapNaviRouteNotifyData中的getNotifyType方法来获取事件通知类型。 

Java

/**
     * 导航过程中道路信息通知
     * 
     * <p>
     *     导航过程中针对拥堵区域、限行区域、禁行区域、道路封闭等情况的躲避通知。<br/>
     *     通知和避让信息结果可以通过{@link com.amap.api.navi.model.AMapNaviRouteNotifyData}获取
     * </p>
     * @param notifyData 通知和避让信息,详细信息请参考{@link com.amap.api.navi.model.AMapNaviRouteNotifyData}
     * @since 6.2.0
     */
    void onNaviRouteNotify(AMapNaviRouteNotifyData notifyData);