{"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精品大图图层等业务图层。
注:可参考 栅格图元 描述
注:可参考 2D矢量路口大图 描述
注:可参考 3D精品大图图元 描述
参考概述
路口大图的数据来自INaviObserver.onShowCrossImage,相关时序图
可接收到该回调之后,转图层线程执行BizRoadCrossControl.updateCross
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 }
/**\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 }
"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 },
\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},
\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},
栅格图的箭头为PNG格式:LayerIconType.LayerIconTypePNG
栅格图的背景为JPG格式:LayerIconType.LayerIconTypeJPG
栅格图的箭头和背景的锚点类型anchorType为左上角:LayerIconAnchor.LayerIconAnchorLeftTop
在栅格图的json配置中正确填写"plane_lut_attr"栅格图色表信息,目前色表模式有两种效果,需注意"draw_mode"的填写,(1:箭头偏移描边,箭头固定为白色,描边固定为蓝色;2:箭头换色,无箭头描边)
此时对于接口输入存在如下要求:
2D矢量路口大图在创建的时候默认为隐藏,第一次显示矢量路口大图的时候需调用SetVisible进行显示控制
3D精品大图可支持路况显示。见:调用示例中的《3D精品大图路况显示》
相关接口如下:
boolean com.autonavi.gbl.layer.BizRoadCrossControl.setFlyTmc(byte[] buffer, ArrayList< RealCityTmcParam > param)
栅格图和2D矢量路口大图支持自定义形状,通过控制背景纹理可达到控制显示形状的效果。
提供给栅格图和2D矢量路口大图的json内容中的"bg_marker_id"为描述绘制效果的纹理。
如果需要直角效果,则"bg_marker_id"对应的纹理设计成具备直角效果的背景图。
如果需要圆角效果,则"bg_marker_id"对应的纹理设计成具备圆角效果的背景图。
#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 // 收费道路
BizRoadCrossControl.updateCross可能返回失败,失败情况不绘制放大路口图,客户端需根据返回值做相关处理(如UI界面的调整)。建议在updateCross返回false的时候,HMI层隐藏路口大图,不是所有路口大图都能显示的。