{"version":"0.1.0","code":"0000","result":true,"message":"处理成功","errdetail":"","timestamp":1671508861877,"data":{"id":71713188,"title":"6.4.7路口大图业务图层控制器","slug":"gi6gc0","format":"lake","bookId":26046811,"body":null,"body_draft":null,"body_html":"

基本介绍

路口大图业务图层控制器主要是关于描述路口大图相关场景的图层,比如栅格路口大图图层、2D矢量路口大图图层3D精品大图图层等业务图层。

场景图

栅格路口大图图层

注:可参考 栅格图元 描述

\"image.png\"

2D矢量路口大图图层

注:可参考 2D矢量路口大图 描述

\"image.png\"

3D精品大图图层

注:可参考 3D精品大图图元 描述

\"image.png\"


时序图

参考概述

路口大图的数据来自INaviObserver.onShowCrossImage,相关时序图

可接收到该回调之后,转图层线程执行BizRoadCrossControl.updateCross


关键参数

Biz路口大图图层业务类型定义

com.autonavi.gbl.layer.model.BizRoadCrossType

分类

业务图层

枚举类型

图元或者图层类型

对应图元Item

是否内聚

是否动态纹理

路口大图

栅格路口大图图层

BizRoadCrossTypeRasterImage

栅格图层

RasterImageLayerItem

2D矢量路口大图图层

BizRoadCrossTypeVector

矢量大图图层

VectorCrossLayerItem

3D精品大图图层

BizRoadCrossTypeRealCity

精品大图图层

RctRouteLayerItem


核心接口

/* 设置图层业务样式回调接口 */\nvoid com.autonavi.gbl.layer.BizRoadCrossControl.setStyle(IPrepareLayerStyle pStyle)\n\n/* 根据放大路口图层类型更新样式 */\nvoid com.autonavi.gbl.layer.BizRoadCrossControl.updateStyle(@CrossType.CrossType1 int crossType)\n\n/* 根据放大路口类型进行显示隐藏控制 */\nvoid com.autonavi.gbl.layer.BizRoadCrossControl.setVisible(@CrossType.CrossType1 int type, boolean bVisible)\n\n/* 设置栅格图图片数据 */\nboolean com.autonavi.gbl.layer.BizRoadCrossControl.setRasterImageData(LayerTexture arrowImge, LayerTexture roadImage)\n\n/* 根据放大路口类型填充数据 */\nboolean com.autonavi.gbl.layer.BizRoadCrossControl.updateCross(byte[] buff, @CrossType.CrossType1 int crossType)\n\n/* 根据放大路口类型隐藏对应的路口大图 */\nvoid com.autonavi.gbl.layer.BizRoadCrossControl.hideCross(@CrossType.CrossType1 int type)\n\n/* 设置导航车首上还是北上模式 */\nvoid com.autonavi.gbl.layer.BizRoadCrossControl.set3DCrossCarMode(boolean isCarUp)\n\n/* 设置3D飞线的路况信息 */\nboolean com.autonavi.gbl.layer.BizRoadCrossControl.setFlyTmc(byte[] buffer, ArrayList< RealCityTmcParam > param)\n\n/* 更新3D精品大图引导信息 */\nvoid com.autonavi.gbl.layer.BizRoadCrossControl.updateNaviInfo(NaviInfo naviInfo)\n    \n/* 设置近接/混淆矢量大图的姿态事件, 目前只有type = CrossTypeVector才有实现才有实现 */\nvoid com.autonavi.gbl.layer.BizRoadCrossControl.setViewPostureEvent(CrossType type, VectorCrossViewPostureEvent postureEvent)\n    \n/* 设置放大路口显示区域 */\nvoid com.autonavi.gbl.layer.BizRoadCrossControl.setRoadCrossRect(@CrossType.CrossType1 int crossType, RectInt viewRect)\n

说明:函数详情,请复制函数名称到在线API搜索


调用示例

路口大图显示

    /**\n     * 显示路口大图\n     *\n     * @details 导航过程中传出路口大图数据\n     * @remark 1、根据CrossImageType区分回到的放大路口类型\n     * @remark 2、同一路口放大路口的优先级:CrossImageType3D > CrossImageTypeGrid > CrossImageTypeVector\n     * @remark 3、类型为CrossImageType3D的三维放大路口图需要有离线三维数据\n     * @param[in] info             路口大图信息\n     * @note thread mutil\n     */\n    @Override\n    public void onShowCrossImage(final CrossImageInfo info) {\n//      1 栅格图, 背景为JPG,箭头为PNG\n//      3 矢量大图\n//      4 三维放大图(渲染:精品三维)\n        sendBizMessage(new Runnable() {\n            @Override\n            public void run() {\n                if (info.type == 3 || info.type == 4) {   //矢量图或者三维图\n                    bizRoadCrossControl.updateCross(info.dataBuf, info.type);\n                } else if (info.type == 1) {  //栅格图\n                    LayerTexture arrowImge = new LayerTexture();\n                    LayerTexture roadImage = new LayerTexture();\n                    arrowImge.dataBuff = new BinaryStream(info.arrowDataBuf);\n                    arrowImge.iconType = LayerIconType.LayerIconTypePNG; // 栅格图箭头为png\n                    arrowImge.resID = info.crossImageID.intValue();\n                    arrowImge.isGenMipmaps = false;\n                    arrowImge.isPreMulAlpha = true;\n                    arrowImge.isRepeat = false;\n                    arrowImge.anchorType = LayerIconAnchor.LayerIconAnchorLeftTop;  // 栅格图的锚点一定要设置为左上角,避免偏移\n\n                    roadImage.dataBuff = new BinaryStream(info.dataBuf);\n                    roadImage.iconType = LayerIconType.LayerIconTypeJPG;  // 栅格图背景图为jpg\n                    roadImage.resID = info.crossImageID.intValue();\n                    roadImage.isGenMipmaps = false;\n                    roadImage.isPreMulAlpha = true;\n                    roadImage.isRepeat = false;\n                    roadImage.anchorType = LayerIconAnchor.LayerIconAnchorLeftTop;  // 栅格图的锚点一定要设置为左上角,避免偏移\n\n                    bizRoadCrossControl.setRasterImageData(arrowImge, roadImage);\n                }\n                bizRoadCrossControl.setVisible(info.type, true); // 需要主动触发显示(2D矢量路口大图第一次显示的时候默认隐藏)\n            }\n        });\n    }

路口大图隐藏

    /**\n     * 隐藏路口大图\n     *\n     * @details 导航过程中通知隐藏路口大图\n     * @param[in] type             路口大图类型\n     * @remark onShowCrossImage对应的消失通知\n     * @note thread mutil\n     */\n    @Override\n    public void onHideCrossImage(final int type) {\n        sendBizMessage(new Runnable() {\n            @Override\n            public void run() {\n                bizRoadCrossControl.hideCross(type);\n            }\n        });\n    }

3D精品大图路况显示

   /**\n     * @return 3D飞线的路况信息数组\n     */\n    public static ArrayList<RealCityTmcParam> generateRealCityTmcPara() {\n        ArrayList<RealCityTmcParam> list = new ArrayList<>(11);\n\n        RealCityTmcParam param = new RealCityTmcParam();\n        param.tmcColor = 0xff88a3be;\n        param.tmcSideColor = 0xff6b6c6d;\n        param.tmcStatus = 0;     // 不可导航道路,且不是路口内部道路\n        list.add(param);\n\n        RealCityTmcParam param1 = new RealCityTmcParam();\n        param1.tmcColor = 0xff0382ff;\n        param1.tmcSideColor = 0xff0372dd;\n        param1.tmcStatus = 1;    // 内部道路、可导航道路\n        list.add(param1);\n\n        RealCityTmcParam param2 = new RealCityTmcParam();\n        param2.tmcColor = 0xff2385ff;\n        param2.tmcSideColor = 0xff0a6fed;\n        param2.tmcStatus = 2;    // 未知,默认状态\n        list.add(param2);\n\n        RealCityTmcParam param3 = new RealCityTmcParam();\n        param3.tmcColor = 0xff00c340;\n        param3.tmcSideColor = 0xff00a45d;\n        param3.tmcStatus = 3;    // 畅通\n        list.add(param3);\n\n        RealCityTmcParam param4 = new RealCityTmcParam();\n        param4.tmcColor = 0xffffea00;\n        param4.tmcSideColor = 0xffffcc00;\n        param4.tmcStatus = 4;    // 缓行\n        list.add(param4);\n\n        RealCityTmcParam param5 = new RealCityTmcParam();\n        param5.tmcColor = 0xfffd3021;\n        param5.tmcSideColor = 0xffdd0f00;\n        param5.tmcStatus = 5;    // 拥堵\n        list.add(param5);\n\n        RealCityTmcParam param6 = new RealCityTmcParam();\n        param6.tmcColor = 0xffc1005a;\n        param6.tmcSideColor = 0xff6e2900;\n        param6.tmcStatus = 6;    // 极其拥堵\n        list.add(param6);\n\n        RealCityTmcParam param7 = new RealCityTmcParam();\n        param7.tmcColor = 0xff0096ff;\n        param7.tmcStatus = 7;    // 轮船航线\n        list.add(param7);\n\n        RealCityTmcParam param8 = new RealCityTmcParam();\n        param8.tmcColor = 0xfffbeeb9;\n        param8.tmcStatus = 0x20; // 限行\n        list.add(param8);\n\n        RealCityTmcParam param9 = new RealCityTmcParam();\n        param9.tmcColor = 0xfff38c1e;\n        param9.tmcStatus = 0x10; // 收费道路\n        list.add(param9);\n\n        return list;\n    }\n\n    /**\n     * 精品三维大图路线支持路况显示\n     */\n    @Override\n    public void onShowNaviCrossTMC(BinaryStream dataBuf) {\n        sendBizMessage(new Runnable() {\n            @Override\n            public void run() {\n                bizRoadCrossControl.setFlyTmc(dataBuf.buffer, CommonUtil.generateRealCityTmcPara());\n            }\n        });\n    }


JSON配置

栅格路口大图(示例)

        "raster_image_style":\n        {\n            "raster_image_layer_item_style":\n            {\n                "priority":0,\n                "winx":24,\n                "winy":224,\n                "width":464,\n                "height":352,\n                "bg_marker_id":"global_image_cross_background_day_night",\n                "marker_id":50000\n          }\n        },

2D矢量路口大图(示例)

\t\t"vector_cross_style": {\n\t\t\t"vector_cross_layer_style": {\n\t\t\t\t"vector_cross_marker": {\n\t\t\t\t\t"bg_marker_id": "global_image_cross_background_day_night",\n\t\t\t\t\t"arrow_outer_marker_id": "arrow_line_outer_in_cross",\n\t\t\t\t\t"arrow_inner_marker_id": "arrow_line_inner_in_cross",\n\t\t\t\t\t"car_marker_id": "car"\n\t\t\t\t},\n\t\t\t\t"vector_cross_attr": {\n\t\t\t\t\t"day_mode": 1,\n\t\t\t\t\t"use_style_configure": 1,\n\t\t\t\t\t"arrow_border_width": 22,\n\t\t\t\t\t"arrow_line_width": 18,\n\t\t\t\t\t"arrow_border_color": {\n\t\t\t\t\t\t"r": 0,\n\t\t\t\t\t\t"g": 50,\n\t\t\t\t\t\t"b": 20,\n\t\t\t\t\t\t"a": 0\n\t\t\t\t\t},\n\t\t\t\t\t"arrow_line_color": {\n\t\t\t\t\t\t"r": 255,\n\t\t\t\t\t\t"g": 255,\n\t\t\t\t\t\t"b": 0,\n\t\t\t\t\t\t"a": 255\n\t\t\t\t\t},\n\t\t\t\t\t"arrow_line_cap_texture": {\n\t\t\t\t\t\t"x1": 0.23,\n\t\t\t\t\t\t"x2": 0.77,\n\t\t\t\t\t\t"y1": 0.77,\n\t\t\t\t\t\t"y2": 0.77\n\t\t\t\t\t},\n\t\t\t\t\t"arrow_header_cap_texture": {\n\t\t\t\t\t\t"x1": 0.23,\n\t\t\t\t\t\t"x2": 0.77,\n\t\t\t\t\t\t"y1": 0.75,\n\t\t\t\t\t\t"y2": 0\n\t\t\t\t\t},\n\t\t\t\t\t"arrow_line_texture": {\n\t\t\t\t\t\t"x1": 0.23,\n\t\t\t\t\t\t"x2": 0.77,\n\t\t\t\t\t\t"y1": 0.77,\n\t\t\t\t\t\t"y2": 0.77,\n\t\t\t\t\t\t"texture_len": 0.001\n\t\t\t\t\t},\n\t\t\t\t\t"rect": {\n\t\t\t\t\t\t"x_min": 24,\n\t\t\t\t\t\t"y_min": 224,\n\t\t\t\t\t\t"x_max": 488,\n\t\t\t\t\t\t"y_max": 576\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},

3D精品大图(示例)

\t\t"rct_cross_style": {\n\t\t\t"rct_route_layer_style": {\n\t\t\t\t"rct_navi_marker": {\n\t\t\t\t\t"car_marker_id": "car",\n\t\t\t\t\t"car_scale":1.5,\n\t\t\t\t\t"compass_marker_id": "",\n\t\t\t\t\t"compass_scale":1.5,\n\t\t\t\t\t"shine_marker_id": "",\n\t\t\t\t\t"shine_scale": 1.5\n\t\t\t\t},\n\t\t\t\t"rct_fly_line_param": {\n\t\t\t\t\t"fill_marker_id": "map_lr_road_white_front",\n\t\t\t\t\t"arrow_marker_id": "",\n\t\t\t\t\t"width": 7,\n\t\t\t\t\t"side_width": 2,\n\t\t\t\t\t"fly_line_texture": {\n\t\t\t\t\t\t"x1": 0.0,\n\t\t\t\t\t\t"x2": 1.0,\n\t\t\t\t\t\t"y1": 0.25,\n\t\t\t\t\t\t"y2": 0.25,\n\t\t\t\t\t\t"texture_len": 256\n\t\t\t\t\t},\n\t\t\t\t\t"fly_line_arrow_texture": {\n\t\t\t\t\t\t"x1": 1.0,\n\t\t\t\t\t\t"x2": 0.0,\n\t\t\t\t\t\t"y1": 1.0,\n\t\t\t\t\t\t"y2": 0.0,\n\t\t\t\t\t\t"texture_len": 256\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},


注意事项

1、栅格路口大图

栅格图的箭头为PNG格式:LayerIconType.LayerIconTypePNG

栅格图的背景为JPG格式:LayerIconType.LayerIconTypeJPG

栅格图的箭头和背景的锚点类型anchorType为左上角:LayerIconAnchor.LayerIconAnchorLeftTop


2、栅格路口大图色表模式

在栅格图的json配置中正确填写"plane_lut_attr"栅格图色表信息,目前色表模式有两种效果,需注意"draw_mode"的填写,(1:箭头偏移描边,箭头固定为白色,描边固定为蓝色;2:箭头换色,无箭头描边)

此时对于接口输入存在如下要求:


3、2D矢量路口大图

2D矢量路口大图在创建的时候默认为隐藏,第一次显示矢量路口大图的时候需调用SetVisible进行显示控制


4、3D精品大图

3D精品大图可支持路况显示。见:调用示例中的《3D精品大图路况显示

相关接口如下:

boolean com.autonavi.gbl.layer.BizRoadCrossControl.setFlyTmc(byte[] buffer, ArrayList< RealCityTmcParam > param)


5、路口大图绘制效果

栅格图和2D矢量路口大图支持自定义形状,通过控制背景纹理可达到控制显示形状的效果。

提供给栅格图和2D矢量路口大图的json内容中的"bg_marker_id"为描述绘制效果的纹理。

如果需要直角效果,则"bg_marker_id"对应的纹理设计成具备直角效果的背景图。

如果需要圆角效果,则"bg_marker_id"对应的纹理设计成具备圆角效果的背景图。


6、3D精品大图路况显示:关于RealCityTmcParam.tmcStatus说明

#define ROUTE_LINK_NONAVI       0    // 不可导航道路,且不是路口内部道路\n#define ROUTE_LINK_INNERNAVI    1    // 内部道路、可导航道路\n#define ROUTE_LINK_DEFAULT      2    // 未知,默认状态\n#define ROUTE_LINK_OPEN         3    // 畅通\n#define ROUTE_LINK_AMBLE        4    // 缓行\n#define ROUTE_LINK_JAM          5    // 拥堵\n#define ROUTE_LINK_CONGESTION   6    // 极其拥堵\n#define ROUTE_LINK_FERRY        7    // 轮船航线\n#define ROUTE_LINK_LIMIT        0x20 // 限行\n#define ROUTE_LINK_SLOWER       0x40 // 通勤场景下更拥堵道路\n#define ROUTE_LINK_FASTER       0x80 // 通勤场景下更畅通道路\n#define ROUTE_LINK_CHARGE       0x10 // 收费道路


7、BizRoadCrossControl.updateCross返回失败

BizRoadCrossControl.updateCross可能返回失败,失败情况不绘制放大路口图,客户端需根据返回值做相关处理(如UI界面的调整)。建议在updateCross返回false的时候,HMI层隐藏路口大图,不是所有路口大图都能显示的。


8、路口大图箭头控制


9、近接/混淆路口大图控制

","body_lake":null,"pub_level":null,"status":"0","updated_at":"2022-04-06 07:04:19","deleted_at":null,"nameSpace":"mnlcaa/v610","browseCount":217,"collectCount":0,"estimateDate":24,"docStatus":0,"permissions":true,"overView":false}}