使用多实例导航地图的能力需要进行鉴权,鉴权接口如下:
NaviAK:使用导航鉴权AK,从地图开放平台上获取,必传参数。
deviceID: 车机设备ID,必传参数。
[BNaviService_Instance authorizeLicenseNaviAK:XXX deviceID:XXX completion:^(NSError *requestError) {}];/// nerwork 状态码typedef NS_ENUM(NSUInteger, BNNetworkErrorCode) {BN_NETWORK_NO_ERROR = 0, ///< 正常返回BN_NETWORK_ERROR, ///< 内部错误BN_NETWORK_PARAMETER_ERROR, ///< 参数错误BN_NETWORK_MODE_ERROR = 3, ///< 没有设置型号BN_NETWORK_NO_QUOTA, ///< 没有配额BN_NETWORK_QUOTA_NO_ENOUGH, ///< 配额不够BN_NETWORK_QUOTA_INVALID = 6, ///< 配额无效BN_NETWORK_NO_PERMISSION = 7, ///< 默认无权限BN_NETWORK_NETWOKR_ERROR = 100, ///< 网络错误BN_NETWORK_NETWOKR_TIMEOUT, ///< 网络连接超时BN_NETWORK_SERVER_ERROR, ///< 服务器错误BN_NETWORK_UNKNOWN_ERROR = 1000, ///< 未知错误BN_NETWORK_LICENSE_ERROR = 2000 ///< license 被封禁};
多实例导航地图相关的接口需要在鉴权成功后才能使用。
手机开始导航后,SDK支持开发者创建新的导航地图实例,开发者可以把这个地图实例投屏到其他的设备上。该功能的接口和回调在BNMultiMapManagerProtocol.h中。
通过如下方法创建导航多实例地图。
/**创建多实例- Parameters:- tag: 多实例标记. 不同MapView 需要使用不一样的tag- frame: 创建的MapView的frame*/- (BNKMapView *)createNaviMapViewWithTag:(NSString *)tag withFrame:(CGRect)frame;
(1)设置地图状态
支持设置地图为2d、3d和全览状态
/// 全览/// - Parameter viewAll: 是否全缆- (void)setViewAllMode:(BOOL)viewAll;///设置地图为3d模式- (void)set3DMode;/// 设置地图为2d模式- (void)set2DMode;
可以通过下面两个回调,设置2D、3D模式下车标的具体位置:
/// 配置地图2D模式车标的偏移量/// 坐标原点为0,0。/// x表示横坐标的偏移量,负数往左边移动,正数往右边移动/// y表示纵坐标的偏移量,负数往下边移动,正数往上边移动- (CGPoint)carOffsetFor2DMode;/// 配置地图3D模式车标的偏移量/// 坐标原点为0,0。/// x表示横坐标的偏移量,负数往左边移动,正数往右边移动/// y表示纵坐标的偏移量,负数往下边移动,正数往上边移动- (CGPoint)carOffsetFor3DMode;
2D、3D、全览的效果如下:

2D

3D

全览
(2)设置路线全览展示区域
接口如下
/// 添加自定义UI碰撞,添加后,路线全览时会路线的展示区域不显示在frame的范围内/// - Parameter frame: 自定义碰撞的frame- (void)addUIViewBound:(CGRect)frame;/**设置路线全览展示区域- Parameter insets: 路线全览展示区域距离MapView四周的边距*/- (void)setRouteShowRect:(UIEdgeInsets)insets;
(3)自定义地图元素
具体接口如下:
/// 显示路况/// - Parameter show: 为YES,展示路况,为NO,隐藏路况- (void)showRoadCondition:(BOOL)show;/// 隐藏路线动态标签,默认全部展示/// - Parameter types: 隐藏的标签类型数组,数组元素为BNMapCarElementType类型,封装为NSNumber对象/// 注意:这个接口不会记住之前传入的隐藏标签类型。/// 比如第一次隐藏 以下标签:@[@(BNMapCarElementType_Camera), @(BNMapCarElementType_EnterRoad), @(BNMapCarElementType_Jam)];/// 后续又需要显示@(BNMapCarElementType_Camera) , 则需要再次传入@[ @(BNMapCarElementType_EnterRoad), @(BNMapCarElementType_Jam)];- (void)hideMapCarElement:(NSArray <NSNumber *> *)types;/// 清除自定义icon/// - Parameter type: 自定义icon类型-(void)clearDIYIcon:(BNMIDIYImageType)type;/// 设置自定义icon/// img: 车标图片/// imageType:车标类型- (void)setDIYIcon:(UIImage *)img type:(BNMIDIYImageType)imageType;/// 设置自定义icon 显示 隐藏/// isShow: yes 是显示 NO隐藏/// imageType:车标类型- (void)setDIYImageShow:(BOOL)isShow type:(BNMIDIYImageType)imageType;/// 设置途径点icon/// images: 数组中存放的是UIimage/// indexes:途径点下标- (void)setWayPointCustomImages:(NSArray<UIImage *> *)images indexes:(NSArray *)indexes;
(4)车道级开关
/// 是否支持车道级,app需要具备车道级权限调用才生效。/// supportLane: YES 开启车道级。 NO 不开启车道级。 如果有车道级权限,默认开启/// 开启车道级后,当进入车道级路段后会自动设置当前多实例为3D模式。- (void)setSupportLane:(BOOL)supportLane;
效果图:


(5)设置白天黑夜样式
/**白天黑夜模式 YES 代表黑夜。NO代表白天 。 默认白天模式*/- (void)setNight:(BOOL)isNight;
效果图:


(6)销毁多实例
///销毁多实例-(void)destroyController;
(7)多实例地图模式
要在驾车页或导航中展示多实例,需分别将页面类型设置为 BNMIMapNaviModeRoute 或 BNMIMapNaviModeNormal。
typedef NS_ENUM(NSInteger, BNMIMapNaviMode) {BNMIMapNaviModeNormal, //导航BNMIMapNaviModeRoute, //驾车路线页};/// 多实例地图模式/// - Parameter/// - BNMIMapNaviMode:- (void)setNaviMode:(BNMIMapNaviMode)naviMode;
(8)多实例车标大小设置
///车标大小 范围0.0~1.0.默认值:1。- (void)setCarIconScale:(CGFloat)scale;///车道级 大小 范围0.0~1.0.默认值:1。- (void)setHDModelCarScale:(CGFloat)scale;
(9)多实例车标周围的罗盘大小
///罗盘 大小 范围0.0~1.0.默认值:1。- (void)setCompassScale:(CGFloat)scale;
手机进入后台导航,由于iOS系统的限制,手机的地图实例无法继续渲染(通过2.1创建的地图实例在后台不会渲染)。如果手机在后台导航时,需要在投屏设备上展示导航地图,需要使用后台导航地图。
该能力的接口在BNBackgroundNavigationViewManagerProtocol.h中。
提供的接口如下:
///获取后台导航地图实例- (BMKBackgroundNavigationView *)backgroundNavigationView;///后台导航地图开始渲染- (void)start;///后台导航地图停止渲染- (void)stop;
注意点:
1、stop仅在不需要使用到后台路网的时候的调用。
上一篇
下一篇
本篇文章对您是否有帮助?