{"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":"
车往前行驶一段时间,比例尺逐步放大
车在行驶过程中会根据下一路口信息、导航信号、定位信号等信息动态计算出当前需要展示的比例尺。
自动比例尺有两种:导航自动比例尺和巡航自动比例尺。
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}
DynamicLevelType.DynamicLevelGuide与DynamicLevelType.DynamicLevelCruise互斥,不能同时打开。不然会出现比例尺异常跳动的可能
如果HMI需要主动调整地图中心(如屏幕左侧要显示放大路口)则使用“调用示例”中的“动态比例尺地图中心能力开关”中的逻辑进行主动关闭。避免地图中心被拉回。
调用时机:在BizGuideRouteControl.openDynamicLevel之后调用,因为openDynamicLevel内部会判断是否横竖屏,如果横屏默认开启左右飘策略。所以需要保证在openDynamicLevel之后调用openDynamicCenter(false)
DynamicLevelParam.mLeftScreenScale用于控制动态比例尺中心点逻辑左飘在屏幕中的左边位置
DynamicLevelParam.mRightScreenScale用于控制动态比例尺中心点逻辑右飘在屏幕中的右边位置
mLeftScreenScale默认为0.5(遇到非左类动作,以这个值归位,动态调整地图中心)
mRightScreenScale默认为0.691(遇到左类动作,以这个值为目标动态调整地图中心)
取值范围都为[0.0, 1.0],从左到右,x轴方向
可通过BizGuideRouteControl.setDynamicLevelCustomCalculator接口自定定义动态比例尺策略。若不使用自定义策略则setDynamicLevelCustomCalculator接口整个生命周期都不要调用或者传null(参考“调用示例”中的“自定义动态比例尺策略”)
BizGuideRouteControl.resetDynamicLevel接口是用于重置动态比例尺的缓存(比例尺+俯仰角+地图中心)。
(HMI需要根据自身需要调用mapView.setMapLeftTop能力重置地图视口锚点)
BizGuideRouteControl.resetDynamicCenter接口是用于重置动态比例尺的缓存(地图中心)。
(HMI需要根据自身需要调用mapView.setMapLeftTop能力重置地图视口锚点)
动态比例尺内聚能力是在json中配置的。关键参数为"virtual_bus"中的"guide_dynamic_layer"。为1表示内聚能力打开,为0表示内聚能力关闭。该json内容在strJsonFilename中描述
/* 初始化业务图层优先级配置及内聚功能配置 */
boolean com.autonavi.gbl.layer.BizControlService.init(@MapEngineID.MapEngineID1 int engineId, String strJsonFilename)