导航实时数据获取 最后更新时间: 2021年01月22日
基本介绍
在实际驾车导航中,导航SDK会通过AMapNaviListener、ParallelRoadListener、AimlessModeListener这些监听器实时的透出导航信息与数据,可帮助您进行UI的定制化开发,是HUD和智能硬件的解决方案。骑行、步行与驾车一致,同样可以通过AMapNaviListener来获取导航事件与数据。
注册一般导航事件与数据监听(驾车、骑行、步行通用):
AMapNavi mAMapNavi = AMapNavi.getInstance(mContext);
// 1.注册一般导航事件与数据监听
mAMapNavi.addAMapNaviListener(new AMapNaviListener() {
// 导航管理类初始化成功回调
@Override
public void onInitNaviSuccess() {
}
// 开始导航回调
@Override
public void onStartNavi(int type) {
}
...
});
注册平行路数据监听(驾车):
AMapNavi mAMapNavi = AMapNavi.getInstance(mContext);
// 注册平行路数据监听
mAMapNavi.addParallelRoadListener(new ParallelRoadListener() {
// 平行路信息变化回调
@Override
public void notifyParallelRoad(AMapNaviParallelRoadStatus roadStatus) {
}
});
注册巡航模式数据监听(驾车):
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,以及导航组件中导航页顶部诱导面板、底部面板的信息,就是主要从该回调获取的。
/**
* 导航引导信息回调。
*
* @param naviInfo 导航信息类对象。
*/
void onNaviInfoUpdate(NaviInfo naviInfo);
路口放大图
路口放大图包含了显示和隐藏两个回调,又根据放大图类别为实景图还是模型图分为两套,一共4个回调,均位于AMapNaviListener中,仅对驾车有效,如下:
/**
* 显示路口放大图回调(实景图)。
*
* @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中,如下:
/**
* 显示车道信息回调
*
* @param laneInfo 车道信息,可获得当前道路信息,可用于用户使用自己的素材完全自定义显示。
* @since 6.0.0
*/
void showLaneInfo(AMapLaneInfo laneInfo);
/**
* 隐藏车道信息回调
*
* @since 1.5.0
*/
void hideLaneInfo();
转向图标
导航过程中路口的转向图标信息,可从NaviInfo中获取,NaviInfo的获取上面已经介绍不再赘述,NaviInfo中转向图标相关的接口有2个,一个是直接获取转向图标的bitmap,另一个是获取转向图标类型的枚举值,可用于自定义转向图标的绘制。图标bitmap带有路网信息,更加直观。
NaviInfo中的接口:
/**
* 获取转向图标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中的主动接口:
/**
* 获取当前路线的路况信息
*
* @return 交通状态对象集合
*/
public List<AMapTrafficStatus> getTrafficStatuses();
AMapNaviListener中的被动接口:
/**
* 当路线的路况信息有更新时的回调。
*/
void onTrafficStatusUpdate();
注意:为了获取更加实时准确的路况信息,建议设置AMapNaviListener监听,在收到onTrafficStatusUpdate回调后,通过AMapNavi的getNaviPath或getNaviPaths接口拿到最新的路线对象,然后通过路线对象的getTrafficStatuses接口获取实时的路况。
电子眼信息
电子眼信息包含电子眼的类型、是否限速、经纬度坐标、当前自车位置到电子眼的距离等信息。位于AMapNaviListener中。
/**
* 导航过程中的摄像头信息回调函数
*
* @param infoArray 摄像头对象数组
* @since 5.0.0
*/
void updateCameraInfo(AMapNaviCameraInfo[] infoArray);
区间测速电子眼信息
导航SDK从v6.0.0开始,透出了区间测速电子眼信息,包含了自车位置和区间测速路段的位置关系、一些实时更新的动态信息等。
/**
* 导航过程中的区间测速信息回调函数
*
* @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开始,透出了服务区和收费站信息,包含了服务区的类型、名称、经纬度坐标、自车位置到服务区的距离,可用于一些自定义的信息展示。
/**
* 服务区信息回调函数
*
* @param infoArray 服务区对象数组,参考 AMapServiceAreaInfo 类
* @since 5.0.0
*/
void onServiceAreaUpdate(AMapServiceAreaInfo[] infoArray);
交通事件
导航SDK从v6.2.0开始,提供了路线上交通事件信息的透出能力,包含了拥堵区域、限行区域、禁行区域、道路封闭等情况的躲避通知。还提供了GPS信号变弱的通知。可从AMapNaviRouteNotifyData中的getNotifyType方法来获取事件通知类型。
/**
* 导航过程中道路信息通知
*
* <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);