阅读 85

Cesium开发:限制地图浏览范围

在二维地图的开发中,有maxbounds属性或者maxextent属性,能够将地图的浏览限制在一定的四至坐标范围中观看。
对比于二维地图里,三维地图多出来高度、旋转、观看角度等参数,在控制的时候,要比二维地图多控制一些东西。Cesium中有设置观看最低、最高高度的API,能够在观看高度上进行控制,下边代码即是:

viewer.scene.screenSpaceCameraController.maximumZoomDistance =100000;   viewer.scene.screenSpaceCameraController.minimumZoomDistance = 10;

设置四至范围的API并没有找到,需要根据现有API进行进一步的开发。
思路是将浏览的范围控制在事先设定好的四至范围中,实时进行检测,超出范围后,让镜头退回到设定的范围中。
实时监测的函数,使用的是preRender,此事件执行的频率还是很高的:\

viewer.scene.preRender.addEventListener(function() { //函数内容});

Cesium的镜头视野范围,开始时用的是computeViewRectangle,计算一个观看的视野范围,计算的结果是west,east,north,south4个范围参数;

let _viewRectangle = viewer.camera.computeViewRectangle();

再拿上述4个范围参数和设定的四至范围进行比对,超出范围的部分,使用设定的四至范围,最后,将camera的观看范围,强制跳回到观看视野中,防止超出。
不过,在这样的计算情况下,场景有一定的跳动,效果不太理想,后来,就把设定的四至范围扩大了一些,判断viewer.camera.position,将观看的坐标限定在四至的坐标中,超出范围的部分,使用设定的四至范围坐标,也是进行强制跳回,这样尽管在观看的范围有一定的误差,但是,整体的效果还是好了些。


作者:wclwksn
链接:https://juejin.cn/post/7026188721741365279


文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐