Cesium笔记(8):ScreenSpaceEventHandler与操作事件监听与信息提示

Cesium笔记(8):ScreenSpaceEventHandler与操作事件监听与信息提示

图形操作事件监听,依靠screenSpaceEventHandler的setInputAction(action, type, modifier)方法,时常监听的相机事件,相机移动后: camera moveEnd 、相机准备移动:camera readonlymoveStart、相机视角改变:camera changed

增加cesium交互事件,提高我们的geocache标记的可见性,当用户在标记上hovers时,我们可以改变它们的样式来突出显示。

为了实现这一点,我们将使用拾取pick,一种Cesium的特征,从3D场景中返回数据,在观看者画布上给出像素位置。

这里有以下几种不同的picking:

  • Scene.pick : 返回包含给定窗口位置的基元的对象。

  • Scene.drillPick : 返回包含给定窗口位置的所有原语的对象列表。

  • Globe.pick : 返回给定光线与地形的交点。

一下是一些picking操作的例子:

因为我们希望在hover触发我们的高亮效果,首先我们需要创建一个鼠标动作处理器。为此,我们将使用ScreenSpaceEventHandler在用户输入操作中触发指定函数的一组处理程序。ScreenSpaceEventHandler.setInputAction()监听用户行为类型ScreenSpaceEventType,并运行一个特定的函数,将用户操作传递为参数。这里,我们将传递一个以movement为输入的函数:

图形事件响应与ScreenSpaceEventHandler

图形操作事件监听,依靠screenSpaceEventHandler的setInputAction(action, type, modifier)方法

常用监听图形操作事件:

  • 鼠标点击事件 Cesium.ScreenSpaceEventType.MOUSE_MOVE

  • 鼠标移动事件 Cesium.ScreenSpaceEventType.MOUSE_MOVE

  • 鼠标滚轮事件 Cesium.ScreenSpaceEventType.WHEEL

具体,可以参看:https://cesium.com/docs/cesiumjs-ref-doc/ScreenSpaceEventType.html

var tooltip = createTooltip(document.body) // 一个HTML展示窗口,样式内容,自定义
let screenSpaceEventHandler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas)
//鼠标移动事件
screenSpaceEventHandler.setInputAction((movement) => {
    let pickedObject = scene.pick(movement.endPosition) // 拾取场景中的图元
    if (pickedObject) {
        viewer.enableCursorStyle = false
        viewer.\_element.style.cursor = ''
        tooltip.setVisible(true)
        tooltip.showAt(movement.endPosition, pickedObject.id.name,pickedObject.id.description)
    } else {
        viewer.enableCursorStyle = true
        tooltip.setVisible(false)
    }
}, Cesium.ScreenSpaceEventType.MOUSE\_MOVE)

相机操作与事件监听

时常监听的相机事件

  • 相机移动后: camera.moveEnd

  • 相机准备移动:camera.readonlymoveStart

  • 相机视角改变:camera.changed

viewer.scene.camera.moveEnd.addEventListener(function(){
  //获取当前相机高度
  let height = Math.ceil(earth.camera.positionCartographic.height);
})

有了事件监控,才能与Cesium地区做交互

渲染事件(实时渲染,很关键的一个事件)

var renderEnd = viewer.scene.postRender.addEventListener(function(){
    //TODO
});

参考文章:

Cesium入门11 – Interactivity–交互性 https://zhuanlan.zhihu.com/p/42790614

本文转自 https://www.zhoulujun.cn/html/GIS/cesium/8336.html,如有侵权,请联系删除。

上一篇:Cesium笔记(9):Cesium常用坐标系相互转化方法与优化说明


下一篇:leetcode hot 100-分割等和子集