javascript - 如何在铯中获取场景变化事件?

标签 javascript cesiumjs

我想在 Cesium View 上检测相机位置、航向、倾斜或滚动的每次变化,以便我可以更新显示这些值的显示。经过大量搜索后,我最终发现我可以将事件处理程序添加到小部件场景对象上的一点也不直观的 preRenderpostRender 事件。然而,这些事件都连续触发,每秒数百次。我猜他们每个时钟滴答发射一次。有没有我可以注册的另一个事件,它会在 map View 更改后触发?我正在寻找接近 Leaflet 的 moveend 事件和 preRenderpostRender 的东西不是吗。

如果做不到这一点,有什么方法可以让 preRenderpostRender 仅在实际发生更改时触发?

最佳答案

另一种不使用计时器的解决方案是监听相机移动开始和移动结束事件。

viewer.camera.moveStart.addEventListener(function() { 
     // the camera started to move
});
viewer.camera.moveEnd.addEventListener(function() { 
     // the camera stopped moving
});

这些听起来更像是您正在寻找的事件。

[编辑] : 虽然默认情况下启用惯性旋转和缩放并且看起来很酷,但可以非常轻松地禁用它们。这将使 moveEnd 事件按预期触发。这是禁用惯性的方法。

var viewer = new Cesium.Viewer();

viewer.scene.screenSpaceCameraController.inertiaSpin = 0;
viewer.scene.screenSpaceCameraController.inertiaTranslate = 0;
viewer.scene.screenSpaceCameraController.inertiaZoom = 0;

关于javascript - 如何在铯中获取场景变化事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29263166/

相关文章:

javascript - 为什么悬停时图像偶尔会损坏

javascript - <head> 使用浏览器打开时不加载脚本

heroku - 通过代理数据或通过 heroku 签署 url 从 S3 tiles 提供私有(private)映射?

Javascript函数增量摊销问题

javascript - Windows 8 html/js : Alternative to <img>/removing the 'dragging' functionality?

javascript - 如何在 Cesium.js 中缩放/移动相机以显示多边形(使视口(viewport)适合多边形边界)

cesiumjs - 铯能移动 5000 个物体吗?

path - 铯路径到地形 : line connecting 2 points goes under the terrain

javascript - PHP 根据用户选择的项目以模式加载数据

javascript - 如何将多个矩形关联到Cesiumjs中的实体?