{"version":"0.1.0","code":"0000","result":true,"message":"处理成功","errdetail":"","timestamp":1671508858377,"data":{"id":71713013,"title":"6.4.2车标业务图层控制器","slug":"mmovxy","format":"lake","bookId":26046811,"body":null,"body_draft":null,"body_html":"
2D车标由LayerItemNaviCarType组成。2D效果。只涉及纹理资源。
3D车标由LayerItemNaviCarType+LayerItem3DModelType组成。3D效果。涉及纹理资源和3D模型。
骨骼车标由LayerItemNaviCarType+FBX格式的3D模型组成。3D效果,具备动画能力。涉及纹理资源和FBX格式的3D模型。
车速车标由LayerItemNaviCarType+LayerItemPointType组成。2D效果。涉及纹理资源。
参考概述
com.autonavi.gbl.map.layer.model.CarMode类
字段 | 含义 |
CarMode2D | 车标模式:2D车标 |
CarMode3D | 车标模式:3D车标 |
CarModeSkeleton | 车标模式:骨骼车标 |
CarModeSpeed | 车标模式:车速车标 |
com.autonavi.gbl.layer.model.BizCarType类
分类 | 业务图层 | 枚举类型 |
车标类 | 导航态车标图层 | BizCarTypeGuide |
巡航态车标图层 | BizCarTypeCruise | |
搜索结果页车标图层 | BizCarTypeSearch | |
路径规划页车标图层 | BizCarTypeRoute | |
熟路模式车标图层 | BizCarTypeFamiliar | |
鹰眼车标图层 | BizCarTypeEagleEye |
com.autonavi.gbl.map.layer.model.LayerItemType类
字段 | 含义 |
LayerItemNaviCarType | 车标 |
LayerItem3DModelType | 3D模型 |
LayerItemPointType | 点 |
/* 设置图层样式回调接口 */\nvoid com.autonavi.gbl.layer.BizCarControl.setStyle(IPrepareLayerStyle pStyle)\n\n/* 通知更新当前车标的Style */\nvoid com.autonavi.gbl.layer.BizCarControl.updateStyle()\nvoid com.autonavi.gbl.layer.BizCarControl.updateStyle(@BizCarType.BizCarType1 int businessType)\n\n/* 控制车标图层显隐 */\nvoid com.autonavi.gbl.layer.BizCarControl.setVisible(boolean bVisible)\n\n/* 控制车标图层是否可点击 */\nvoid com.autonavi.gbl.layer.BizCarControl.setClickable(boolean bClickable)\n\n/* 设置车标模式,2D车标/3D车标/骨骼车标/车速车标 */\nvoid com.autonavi.gbl.layer.BizCarControl.setCarMode(@CarMode.CarMode1 int carMode, boolean bUpdateStyle)\n\n/* 获取当前车标模式,2D车标/3D车标/骨骼车标/车速车标 */\nint com.autonavi.gbl.layer.BizCarControl.getCarMode()\n\n/* 更新车标位置信息,用于定位引擎下发定位消息驱动使用,频次高 */\nvoid com.autonavi.gbl.layer.BizCarControl.updateCarPosition(CarLoc carLoc)\n\n/* 设置车标位置信息。通常用于单次设置车标位置,频次低 */\nvoid com.autonavi.gbl.layer.BizCarControl.setCarPosition(CarLoc carLoc)\n\n/* 获取车标位置信息 */\nCarLoc com.autonavi.gbl.layer.BizCarControl.getCarPosition()\n\n/* 设置车头朝上模式 */\nvoid com.autonavi.gbl.layer.BizCarControl.setCarUpMode(boolean bCarUp)\n\n/* 获取车头朝上模式 */\nboolean com.autonavi.gbl.layer.BizCarControl.getCarUpMode()\n\n/* 设置跟随模式、自由模式 */\nvoid com.autonavi.gbl.layer.BizCarControl.setFollowMode(boolean bFollow)\n\n/* 获取跟随模式、自由模式 */\nboolean com.autonavi.gbl.layer.BizCarControl.getFollowMode()\n\n/* 设置锁定地图角度模式 */\nvoid com.autonavi.gbl.layer.BizCarControl.setLockMapRollAngle(boolean bLockAngle)\n\n/* 获取锁定地图角度模式 */\nboolean com.autonavi.gbl.layer.BizCarControl.getLockMapRollAngle()\n\n/* 设置预览模式 */\nvoid com.autonavi.gbl.layer.BizCarControl.setPreviewMode(boolean bPreview)\n\n/* 获取预览模式 */\nboolean com.autonavi.gbl.layer.BizCarControl.getPreviewMode()\n\n/* 添加车标观察者回调 */\nboolean com.autonavi.gbl.layer.BizCarControl.addCarObserver(ICarObserver pObserver)\n\n/* 删除车标观察者回调 */\nboolean com.autonavi.gbl.layer.BizCarControl.removeCarObserver(ICarObserver pObserver)\n\n/* 设置车标动画开关 */\nvoid com.autonavi.gbl.layer.BizCarControl.setCarAnimationSwitch(boolean bOpen)\n\n/* 设置车标缩放系数和比例尺对应关系 */\nboolean com.autonavi.gbl.layer.BizCarControl.setCarScaleByMapLevel(float[] vScales)\n\n/* 设置车标最大俯视角度 */\nvoid com.autonavi.gbl.layer.BizCarControl.setMaxPitchAngle(float fDegree)\n\n/* 是否开启小车遮挡效果 */\nvoid com.autonavi.gbl.layer.BizCarControl.setOcclusionCar(boolean bIsOcclusion)\n\n/* 设置骨骼车标状态 */\nvoid com.autonavi.gbl.layer.BizCarControl.setSkeletonCarStatus(@SkeletonCarStatus.SkeletonCarStatus1 int status)\n\n/* 传入骨骼车标二进制数据 */\nvoid com.autonavi.gbl.layer.BizCarControl.setSkeletonData(byte[] data)\n\n/* 设置骨骼车标的基础缩放值 */\nvoid com.autonavi.gbl.layer.BizCarControl.setSkeletonBaseScale(float baseScale)
说明:函数详情,请复制函数名称到在线API搜索
// 切换车标为车速车标\ncarControl.setCarMode(CarMode.CarModeSpeed, true);
float[] carScale = {1.0f, 3.0f, 1.0f, 3.0f, 1.0f, 3.0f, 1.0f, 3.0f, 1.0f, 3.0f, 1.0f, 3.0f, 1.0f, 3.0f, 1.0f, 3.0f, 1.0f, 3.0f, 1.0f, 3.0f, 1.0f};\ncarControl.setCarScaleByMapLevel(carScale);
CarLoc carLoc = new CarLoc();\nPathMatchInfo info = new PathMatchInfo();\ninfo.longitude = lon;\ninfo.latitude = lat;\ninfo.carDir = 90;\ncarLoc.vecPathMatchInfo.add(info);\ncarControl.setCarPosition(carLoc);
{\n "car_marker": // 车标纹理资源\n {\n "compass_marker_id":-1, // 罗盘\n "compass_indicator_marker_id":-1, // 罗盘上小圆点\n "track_marker_id":-1, // 车标\n "track_arc_marker_id":-1, // 车标底图\n "shine_marker_id":-1 // 呼吸\n },\n "compass_marker_info": // 罗盘上4个marker(东南西北)的资源\n {\n "east_marker_id":-1, // 东罗盘\n "south_marker_id":-1, // 南罗盘\n "west_marker_id":-1, // 西罗盘\n "north_marker_id":-1, // 北罗盘\n "relative_distance":0.0 // marker相对中心点位置\n },\n "car_animation_style": // 车标的动画风格参数\n {\n "car_style":-1, // 网络定位状态下或者GPS下的车标\n "no_net": // 非网络定位\n {\n "animation_duration":0, // 动画时长\n "from_lpha":0.0, // 起始alpha值,范围[0,1]\n "end_lpha":0.0 // 结束alpha值,范围[0,1]\n },\n "net": // 网络定位\n {\n "animation_duration":0, // 动画时长\n "from_zoom":0.0, // 呼吸动画,变化范围开始位置,纹理图片大小比例\n "end_zoom":0.0 // 呼吸动画,变化范围结束位置,纹理图片大小比例\n }\n }\n}
其中【"compass_indicator_marker_id",罗盘上小圆点】当前auto不使用,可不传或置为-1
其中【"car_animation_style",车标的动画风格参数】可不配,配置了才有呼吸动画效果
其中【"car_style",动画风格】配置1则"no_net"生效,针对"shine_marker_id";配置2则"net"生效,针对 "track_marker_id"
对应的字段传入-1则表示不需要
marker_id对应的纹理资源是依靠addLayerTexture能力进行加载
对应的字段传入-1则表示不需要
在getLayerStyle回调接口中,CarMode的值需要通过BizCarControl.getCarMode方式获取得到
{\n "3dcar_style":\n {\n "3dmodel_layer_item_style":\n {\n "priority":0, // 重要度\n "model_id":"autocar" // 模型ID\n }\n }\n}
model_id对应的车标模型是依靠addLayer3DModel能力进行加载
对应的字段传入-1则表示不需要
\t\t"point_speed_car_base": {\n\t\t\t"point_layer_item_style": {\n\t\t\t\t"normal_style": {\n\t\t\t\t\t"poi_marker_id": 65539\t\t\t// 车速车标背景纹理ID\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t"point_speed_car": {\n\t\t\t"point_layer_item_style": {\n\t\t\t\t"normal_style": {\n\t\t\t\t\t"poi_marker_id": 65540\t\t\t// 车速车标速度值纹理ID\n\t\t\t\t}\n\t\t\t}\n\t\t},
marker_id对应的纹理资源是依靠addLayerTexture能力进行加载
对应的字段传入-1则表示不需要
a、2D图片信息是在GetLayerStyle回调接口中,LayerItem.getItemType()为LayerItemNaviCarType时指定
// "car_layer_style",2D车标组成如下
= // "compass_marker_id",罗盘
+ // "track_marker_id",车标
+ // "track_arc_marker_id",车标底图
+ // "shine_marker_id",呼吸
++
+
+
// "compass_marker_info",罗盘上4个marker(东南西北)的资源
=
+
a、其中LayerItem3DModelType中指定要显示的车标模型
b、3D车模的大小是根据【 "track_arc_marker_id",车标底图】的大小进行等比缩放,由内部逻辑控制
c、其中LayerItemNaviCarType中的【"track_marker_id",车标】不会生效,车标的效果由车标模型体现。
d、LayerItemNaviCarType中的资源可自主替换
=
+
a、其中骨骼车标的加载是通过BizCarControl.setSkeletonData(byte[] data)进行加载的
b、骨骼车模的大小需要在制作的时候固定规格大小,由内部逻辑控制缩放
c、其中LayerItemNaviCarType中的【"track_marker_id",车标】不会生效,车标的效果由骨骼车标模型体现。
d、LayerItemNaviCarType中的资源可自主替换
=
+
a、其中LayerItemPointType有两张是由车速值和车速底盘组合而成
b、车速值的图片是根据当前车速值处理的图片,非静态图,需一直更新
c、车速车标中的LayerItemPointType显示效果需便于阅读内部逻辑会控制始终朝上
d、车速车标对应的是SpeedCarLayerItem
=
+
e、其中LayerItemNaviCarType中的【"track_marker_id",车标】不会生效,车标的效果由车速车标体现。
f、LayerItemNaviCarType中的资源可自主替换
车速车标的显示效果是实时显示当前车速。车速值的来源一般是定位信号提供的车速值。
车速车标的纹理更新接口与其他纹理接口一致,都为MapView.addLayerTexture或MapView.updateTexture接口。
车速车标的纹理更新对线程有一定要求,如《图层对线程的要求》的介绍。车速车标的纹理更新操作也是图层相关操作,所以不能直接在定位线程中直接发起,需要将该操作放在ServiceMgr.setBizLooper指定线程或UI线程中。避免出现车速车标的速度值显示效果偶现不朝上的现象。
车标位置变更支持内聚(即会根据定位信号主动变更车标位置)。
车标位置变更有两个接口:
updateCarPosition:在定位信号变更的时候使用(若启用车标内聚能力,则可不使用该接口)
setCarPosition:可以在HMI需要主动变更车标位置的场景使用
/* 更新车标位置信息,用于定位引擎下发定位消息驱动使用,频次高 */
void com.autonavi.gbl.layer.BizCarControl.updateCarPosition(CarLoc carLoc)
/* 设置车标位置信息。通常用于单次设置车标位置,频次低 */
void com.autonavi.gbl.layer.BizCarControl.setCarPosition(CarLoc carLoc)
车标内聚能力是在json中配置的。关键参数为"virtual_bus"中的"car_layer"。为1表示内聚能力打开,为0表示内聚能力关闭。该json内容在strJsonFilename中描述
/* 初始化业务图层优先级配置及内聚功能配置 */
boolean com.autonavi.gbl.layer.BizControlService.init(@MapEngineID.MapEngineID1 int engineId, String strJsonFilename)
车标动画是通过json的方式进行配置。其中车标呼吸动画的描述在"car_animation_style"
"car_style"目前支持两个值,1或2
1为呼吸灯动画,对应纹理为"shine_marker_id"。
呼吸灯效果是透明动画,动画类型为来回摆动,从"from_lpha"到"end_lpha"
动画效果使用的是"no_net"内容。
2为小车动画,对应纹理为"track_marker_id"。
小车呼吸效果是缩放动画,动画类型为来回摆动,从"from_zoom"到"end_zoom"
动画效果使用的是"net"内容。
跟随模式:当有定位信号输入的时候,地图中心跟随着车标走
自由模式:不管有没有定位信号输入,地图中心可以自由移动,不跟随着车标走
setOcclusionCar接口用于控制车标深度检测,设置小车是否压盖3D箭头及建筑物。
setOcclusionCar影响两个方面:绘制效果及车标位置
车标控制器默认setOcclusionCar(false)
开启深度,车标绘制的时候会考虑具备高度的元素(如3D箭头,如建筑楼块)
绘制效果:车标绘制会根据定位信号的真实高度绘制,可能会出现被3D箭头和建筑楼块压盖的情况
车标位置:开启简易三维的情况下,车标位置是根据定位信号绘制,要匹配正确位置需开启车标深度
关闭深度,车标绘制的时候不考虑具备高度的元素(如3D箭头,如建筑楼块)
绘制效果:车标绘制会根据车标的优先级绘制,与3D箭头和建筑楼块的高度无关
车标位置:关闭简易三维的情况下,车标位置是根据定位信号绘制,要匹配正确位置需开启关闭深度
【导航场景】setOcclusionCar接口需要与简易三维开关联动,避免车标绘制位置异常及压盖效果异常
简易三维开,需调用setOcclusionCar(true)
简易三维关,需调用setOcclusionCar(false)
【主图场景】若不能接受车标的罗盘与楼块的压盖效果,可调用setOcclusionCar(false)
【业务场景】当车标业务类型为以下几类:
BizCarTypeGuide = 2001, /**< 导航车标 */
BizCarTypeCruise = 2002, /**< 巡航车标 */
BizCarTypeSearch = 2003, /**< 搜索结果车标 */
且不处于在线巡航时,
对于非2d车标,基础版业务逻辑是:当比例尺小于1000时显示对应车标(如车速车标),比例尺大于等于1000时自动切换到2d车标。
【HMI对接】HMI调用BizCarControl.SetCarMode(CarMode2D),触发图层更新纹理;之后图层通过IPrepareLayerParam.GetPrepareLayerParam回调,根据PrepareLayerCarParam.showMiniCar的值来显示2d车标。
注意点:
(1) 图层下沉的逻辑除了比例尺>= 1000外,还有只对主屏和非BizCarTypeFamiliar模式生效,HMI需要同样保留。 if ((scale >= 1000) && (MapEngineIdMain == mEngineID) && (BizCarTypeFamiliar != carType))
(2) 需要对该判断相关变量做缓存,保证切换到2D车标时,BizCarControl.SetCarMode(CarMode carMode, bool bUpdateStyle)用的条件和图层获取到的showMiniCar值一致。