{"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车标

2D车标由LayerItemNaviCarType组成。2D效果。只涉及纹理资源。



3D车标

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);


JSON配置

LayerItemNaviCarType相关

{\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方式获取得到

LayerItem3DModelType相关

{\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则表示不需要

LayerItemPointType相关

\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则表示不需要

注意事项

1、2D车标

2D车标各元素指定

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(东南西北)的资源


2、3D车标

=+

3D车标各元素指定

a、其中LayerItem3DModelType中指定要显示的车标模型

b、3D车模的大小是根据【 "track_arc_marker_id",车标底图】的大小进行等比缩放,由内部逻辑控制


c、其中LayerItemNaviCarType中的【"track_marker_id",车标】不会生效,车标的效果由车标模型体现。

d、LayerItemNaviCarType中的资源可自主替换


3、骨骼车标

=+

骨骼车标各元素指定

a、其中骨骼车标的加载是通过BizCarControl.setSkeletonData(byte[] data)进行加载的

b、骨骼车模的大小需要在制作的时候固定规格大小,由内部逻辑控制缩放


c、其中LayerItemNaviCarType中的【"track_marker_id",车标】不会生效,车标的效果由骨骼车标模型体现。

d、LayerItemNaviCarType中的资源可自主替换


4、车速车标

=+

车速车标各元素指定

a、其中LayerItemPointType两张是由车速值和车速底盘组合而成

b、车速值的图片是根据当前车速值处理的图片,非静态图,需一直更新

c、车速车标中的LayerItemPointType显示效果需便于阅读内部逻辑会控制始终朝上

d、车速车标对应的是SpeedCarLayerItem

=+


e、其中LayerItemNaviCarType中的【"track_marker_id",车标】不会生效,车标的效果由车速车标体现。

f、LayerItemNaviCarType中的资源可自主替换

车速车标纹理更新

车速车标的显示效果是实时显示当前车速。车速值的来源一般是定位信号提供的车速值。

车速车标的纹理更新接口与其他纹理接口一致,都为MapView.addLayerTexture或MapView.updateTexture接口。

车速车标的纹理更新对线程有一定要求,如《图层对线程的要求》的介绍。车速车标的纹理更新操作也是图层相关操作,所以不能直接在定位线程中直接发起,需要将该操作放在ServiceMgr.setBizLooper指定线程或UI线程中。避免出现车速车标的速度值显示效果偶现不朝上的现象。


5、车标位置变更

车标位置变更支持内聚(即会根据定位信号主动变更车标位置)。

车标位置变更有两个接口:

updateCarPosition:在定位信号变更的时候使用(若启用车标内聚能力,则可不使用该接口)

setCarPosition:可以在HMI需要主动变更车标位置的场景使用

/* 更新车标位置信息,用于定位引擎下发定位消息驱动使用,频次高 */

void com.autonavi.gbl.layer.BizCarControl.updateCarPosition(CarLoc carLoc)


/* 设置车标位置信息。通常用于单次设置车标位置,频次低 */

void com.autonavi.gbl.layer.BizCarControl.setCarPosition(CarLoc carLoc)


6、车标内聚能力

车标内聚能力是在json中配置的。关键参数为"virtual_bus"中的"car_layer"。为1表示内聚能力打开,为0表示内聚能力关闭。该json内容在strJsonFilename中描述

/* 初始化业务图层优先级配置及内聚功能配置 */

boolean com.autonavi.gbl.layer.BizControlService.init(@MapEngineID.MapEngineID1 int engineId, String strJsonFilename)


7、车标呼吸动画

车标动画是通过json的方式进行配置。其中车标呼吸动画的描述在"car_animation_style"

"car_style"目前支持两个值,1或2

"car_style":1

1为呼吸灯动画,对应纹理为"shine_marker_id"。

呼吸灯效果是透明动画,动画类型为来回摆动,从"from_lpha"到"end_lpha"

动画效果使用的是"no_net"内容。

"car_style":2

2为小车动画,对应纹理为"track_marker_id"。

小车呼吸效果是缩放动画,动画类型为来回摆动,从"from_zoom"到"end_zoom"

动画效果使用的是"net"内容。

8、跟随模式及自由模式

跟随模式:当有定位信号输入的时候,地图中心跟随着车标走

自由模式:不管有没有定位信号输入,地图中心可以自由移动,不跟随着车标走

9、简易三维下车标相关设置

setOcclusionCar接口用于控制车标深度检测,设置小车是否压盖3D箭头及建筑物。

setOcclusionCar影响两个方面:绘制效果及车标位置

车标控制器默认setOcclusionCar(false)

setOcclusionCar(true)

开启深度,车标绘制的时候会考虑具备高度的元素(如3D箭头,如建筑楼块)

绘制效果:车标绘制会根据定位信号的真实高度绘制,可能会出现被3D箭头和建筑楼块压盖的情况

车标位置:开启简易三维的情况下,车标位置是根据定位信号绘制,要匹配正确位置需开启车标深度

setOcclusionCar(false)

关闭深度,车标绘制的时候不考虑具备高度的元素(如3D箭头,如建筑楼块)

绘制效果:车标绘制会根据车标的优先级绘制,与3D箭头和建筑楼块的高度无关

车标位置:关闭简易三维的情况下,车标位置是根据定位信号绘制,要匹配正确位置需开启关闭深度

setOcclusionCar接口使用建议:

【导航场景】setOcclusionCar接口需要与简易三维开关联动,避免车标绘制位置异常及压盖效果异常

简易三维开,需调用setOcclusionCar(true)

简易三维关,需调用setOcclusionCar(false)

【主图场景】若不能接受车标的罗盘与楼块的压盖效果,可调用setOcclusionCar(false)

10、BizCarControl.SetCarMode(CarMode2D)使用注意

【业务场景】当车标业务类型为以下几类:

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值一致。

","body_lake":null,"pub_level":null,"status":"0","updated_at":"2022-09-07 02:26:49","deleted_at":null,"nameSpace":"mnlcaa/v610","browseCount":296,"collectCount":0,"estimateDate":25,"docStatus":0,"permissions":true,"overView":false}}