ViewModel.setLookAtData仅传bounds时无动画问题求助
解决地图缩放定位仅传bounds时无动画的问题
我之前也碰到过这个一模一样的坑!当时调用map.getViewModel().setLookAtData({ bounds: boundingBox }, true)时,视图确实正确定位到了目标范围,但动画就是死活不触发,加了zoom参数就正常——完全理解你不想手动计算缩放级别的想法,毕竟自动适配才是最优解。
这里有两个可行的解决办法,你可以根据自己的场景选:
方法一:借助API内置方法自动计算zoom+center,再传参
核心思路是用地图ViewModel提供的内置方法,自动算出适配bounds的zoom级别和中心点,然后把这三个参数一起传给setLookAtData,这样API就会识别出这是需要平滑过渡的视图变更,触发动画:
// 从目标边界自动计算中心点和适配的缩放级别 const targetCenter = boundingBox.center; const targetZoom = map.getViewModel().getZoomForBounds(boundingBox); // 同时传入bounds、center、zoom,启用动画 map.getViewModel().setLookAtData({ bounds: boundingBox, center: targetCenter, zoom: targetZoom }, true);
这个方法本质上还是让API自动计算缩放级别,只是多传递了两个自动生成的参数,完美契合你的需求。
方法二:改用goTo方法(更省心)
如果你不需要局限于用ViewModel的setLookAtData,可以直接调用视图的goTo方法——这个方法本身就支持传入bounds,并且默认会触发动画,完全不需要手动计算任何参数:
// 直接跳转到目标边界,启用动画 map.getView().goTo(boundingBox, { animate: true, duration: 600 // 可选,自定义动画时长(毫秒) });
我自己后来就是改用这个方法解决的,代码更简洁,也不用操心参数兼容问题。
这两个方法都能解决“自动适配范围+触发动画”的需求,你可以根据项目里的API使用习惯来选~
内容的提问来源于stack exchange,提问作者Chuck
相关产品推荐
相关产品推荐

