{"version":"0.1.0","code":"0000","result":true,"message":"处理成功","errdetail":"","timestamp":1671516370728,"data":{"id":71713049,"title":"6.4.4.1动态比例尺","slug":"fs2n85","format":"lake","bookId":26046811,"body":null,"body_draft":null,"body_html":"

场景图

\"image.png\"

车往前行驶一段时间,比例尺逐步放大

\"image.png\"


车在行驶过程中会根据下一路口信息、导航信号、定位信号等信息动态计算出当前需要展示的比例尺。

自动比例尺有两种:导航自动比例尺巡航自动比例尺


关键参数

自动比例尺类型

com.autonavi.gbl.layer.model.DynamicLevelType

字段

含义

DynamicLevelGuide

导航自动比例尺

DynamicLevelCruise

巡航自动比例尺


核心接口

/* 初始化动态比例尺 */\nvoid com.autonavi.gbl.layer.BizGuideRouteControl.initDynamicLevel(DynamicLevelParam param)\n\n/* 获取动态比例尺参数 */\nDynamicLevelParam com.autonavi.gbl.layer.BizGuideRouteControl.getDynamicLevelParam()\n\n/* 更新动态比例尺参数 */\nboolean com.autonavi.gbl.layer.BizGuideRouteControl.updateDynamicLevel(DynamicLevelParam updateParam)\n\n/* 是否打开动态比例尺功能,type区分巡航动态比例尺还是导航动态比例尺 */\nvoid com.autonavi.gbl.layer.BizGuideRouteControl.openDynamicLevel(boolean bOpen, @DynamicLevelType.DynamicLevelType1 int type)\n\n/* 重置动态比例尺状态,type区分巡航动态比例尺还是导航动态比例尺 */\nvoid com.autonavi.gbl.layer.BizGuideRouteControl.resetDynamicLevel(@DynamicLevelType.DynamicLevelType1 int type)\n\n/* 设置自动比例尺是否主动调整地图中心 */\nvoid com.autonavi.gbl.layer.BizGuideRouteControl.openDynamicCenter(boolean changeCenter)\n\n/* 重置自动比例尺缓存的状态, 仅涉及地图中心变化 */\nvoid com.autonavi.gbl.layer.BizGuideRouteControl.resetDynamicCenter()\n\n/* 获取动态比例尺计算的值,type区分巡航动态比例尺还是导航动态比例尺, bRecalculate决定获取上次计算结果还是重新计算 */\nfloat com.autonavi.gbl.layer.BizGuideRouteControl.getDynamicLevel(@DynamicLevelType.DynamicLevelType1 int type, bool bRecalculate)\n\n/* 获取动态比例尺的地图仰角的值,type区分巡航动态比例尺还是导航动态比例尺 */\nfloat com.autonavi.gbl.layer.BizGuideRouteControl.getDynamicLevelMapHeadDegree(@DynamicLevelType.DynamicLevelType1 int type)\n\n/* 设置动态比例尺是否锁住状态,type区分巡航动态比例尺还是导航动态比例尺 */\nvoid com.autonavi.gbl.layer.BizGuideRouteControl.setDynamicLevelLock(boolean isLock, @DynamicLevelType.DynamicLevelType1 int type)\n\n/* 获取动态比例尺是否锁住状态,type区分巡航动态比例尺还是导航动态比例尺 */\nboolean com.autonavi.gbl.layer.BizGuideRouteControl.getDynamicLevelLock(@DynamicLevelType.DynamicLevelType1 int type)\n\n/* 设置动态比例尺自定义计算策略,type区分巡航动态比例尺还是导航动态比例尺 */\nvoid com.autonavi.gbl.layer.BizGuideRouteControl.setDynamicLevelCustomCalculator(DynamicLevelCustomCalculator calculator, @DynamicLevelType.DynamicLevelType1 int type)

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


调用示例

初始化动态比例尺

DynamicLevelParam dynamicLevelParam = new DynamicLevelParam();\nbizGuideRouteControl.initDynamicLevel(dynamicLevelParam);

开启巡航动态比例尺

bizGuideRouteControl.openDynamicLevel(false, DynamicLevelType.DynamicLevelGuide);\nbizGuideRouteControl.openDynamicLevel(true, DynamicLevelType.DynamicLevelCruise);

开启导航动态比例尺

bizGuideRouteControl.openDynamicLevel(true, DynamicLevelType.DynamicLevelGuide);\nbizGuideRouteControl.openDynamicLevel(false, DynamicLevelType.DynamicLevelCruise);

动态比例尺地图比例尺是否锁定

bizGuideRouteControl.setDynamicLevelLock(bLock, DynamicLevelType.DynamicLevelGuide);\nbizGuideRouteControl.setDynamicLevelLock(bLock, DynamicLevelType.DynamicLevelCruise);

动态比例尺地图中心能力开关

if (mIsDynaCenterLock) {\n    bizGuideRouteControl.openDynamicCenter(true);\n} else {\n    /* 清除中心变化缓存 */\n    bizGuideRouteControl.resetDynamicCenter();\n    /* 此时设置不可改变中心 */\n    bizGuideRouteControl.openDynamicCenter(false);\n    /* 按需调用mapView.setMapLeftTop接口恢复视口锚点 */\n}

自定义动态比例尺策略

if (isDynaCumstomCal) {\n    bizGuideRouteControl.setDynamicLevelCustomCalculator(DynaCustomCal.getInstance(), DynamicLevelType.DynamicLevelGuide);\n    bizGuideRouteControl.setDynamicLevelCustomCalculator(DynaCustomCal.getInstance(), DynamicLevelType.DynamicLevelCruise);\n} else {\n    bizGuideRouteControl.setDynamicLevelCustomCalculator(null, DynamicLevelType.DynamicLevelGuide);\n    bizGuideRouteControl.setDynamicLevelCustomCalculator(null, DynamicLevelType.DynamicLevelCruise);\n}


注意事项

1、DynamicLevelType说明

DynamicLevelType.DynamicLevelGuide与DynamicLevelType.DynamicLevelCruise互斥,不能同时打开。不然会出现比例尺异常跳动的可能

2、动态比例尺地图中心能力

如果HMI需要主动调整地图中心(如屏幕左侧要显示放大路口)则使用“调用示例”中的“动态比例尺地图中心能力开关”中的逻辑进行主动关闭。避免地图中心被拉回。

调用时机:在BizGuideRouteControl.openDynamicLevel之后调用,因为openDynamicLevel内部会判断是否横竖屏,如果横屏默认开启左右飘策略。所以需要保证在openDynamicLevel之后调用openDynamicCenter(false)

3、动态比例尺地图中心左右飘控制

DynamicLevelParam.mLeftScreenScale用于控制动态比例尺中心点逻辑在屏幕中的左边位置

DynamicLevelParam.mRightScreenScale用于控制动态比例尺中心点逻辑在屏幕中的右边位置

mLeftScreenScale默认为0.5(遇到非左类动作,以这个值归位,动态调整地图中心

mRightScreenScale默认为0.691(遇到左类动作,以这个值为目标动态调整地图中心)

取值范围都为[0.0, 1.0],从左到右,x轴方向

4、动态比例尺自定义策略

可通过BizGuideRouteControl.setDynamicLevelCustomCalculator接口自定定义动态比例尺策略。若不使用自定义策略则setDynamicLevelCustomCalculator接口整个生命周期都不要调用或者传null(参考“调用示例”中的“自定义动态比例尺策略”)

5、自动比例尺缓存重置时机(resetDynamicLevel

BizGuideRouteControl.resetDynamicLevel接口是用于重置动态比例尺的缓存(比例尺+俯仰角+地图中心)。

(HMI需要根据自身需要调用mapView.setMapLeftTop能力重置地图视口锚点)

6、自动比例尺缓存重置时机(resetDynamicCenter

BizGuideRouteControl.resetDynamicCenter接口是用于重置动态比例尺的缓存(地图中心)。

(HMI需要根据自身需要调用mapView.setMapLeftTop能力重置地图视口锚点)

7、动态比例尺内聚能力

动态比例尺内聚能力是在json中配置的。关键参数为"virtual_bus"中的"guide_dynamic_layer"。为1表示内聚能力打开,为0表示内聚能力关闭。该json内容在strJsonFilename中描述

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

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

\"image.png\"

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