• 学习【Cesium】第九篇,鼠标交互和数据查询(学不会揍我)


    这篇主要是学习鼠标交互和数据查询,那么这里有必要搞清楚Cesium空间事件类型有哪些才能进行下一步查询操作,话不多说,上图:

    文档中查找 ScreenSpaceEventType 对象

    文档对于事件类型已经做了列表,我这边画蛇添足😀补充一个中文对照表:

    事件名称类型描述
    LEFT_DOWN数字表示鼠标左键按下事件。
    LEFT_UP数字表示鼠标左键向上事件。
    LEFT_CLICK数字表示鼠标左键单击事件。
    LEFT_DOUBLE_CLICK数字表示鼠标左键双击事件。
    RIGHT_DOWN数字表示鼠标左键按下事件。
    RIGHT_UP数字表示鼠标右键向上事件。
    RIGHT_CLICK数字表示鼠标右键单击事件。
    MIDDLE_DOWN数字表示鼠标中键按下事件。
    MIDDLE_UP数字表示鼠标中键向上事件。
    MIDDLE_CLICK数字表示鼠标中键单击事​​件。
    MOUSE_MOVE数字表示鼠标移动事件。
    WHEEL数字表示鼠标滚轮事件。
    PINCH_START数字表示触摸表面上的两指事件的开始。
    PINCH_END数字表示触摸表面上的两指事件的结束。
    PINCH_MOVE数字表示触摸表面上两指事件的变化。

     代码示例:

    1. // 添加鼠标左键点击事件
    2. const handler = new Cesium.ScreenSpaceEventHandler(this.viewer.cavans)
    3. handler.setInputAction(e => {
    4. console.info('e:', e)
    5. }, Cesium.ScreenSpaceEventType.LEFT_CLICK)

     执行效果,如下:

    其他事件都是照葫芦画瓢,把事件类型对就行。
     

    以上点击,只是实现了屏幕坐标的信息打印,我们在项目处理过程中,经常会在屏幕坐标和空间坐标进行互转,业务场景大概是:我加载了模型,点击模型想要获取模型的属性信息,如何操作呢?接下来,还是上代码说明:

     添加多边形并添加描述:

    1. const position2 = new Cesium.Cartesian3.fromDegrees(114.21, 30.55, 0)
    2. // 面
    3. const entityC = this.viewer.entities.add({
    4. id: 'entityC',
    5. position: position2,
    6. plane: {
    7. plane: new Cesium.Plane(Cesium.Cartesian3.UNIT_Z, 5.0),
    8. dimensions: new Cesium.Cartesian2(400, 400),
    9. material: Cesium.Color.BURLYWOOD,
    10. outline: true,
    11. outlineWidth: 10,
    12. outlineColor: Cesium.Color.BROWN,
    13. show: true
    14. },
    15. description: `
    16. 这是一个简单的信息

    17. `
  • })
  •  添加点击事件

    1. // 添加鼠标左键点击事件
    2. const handler = new Cesium.ScreenSpaceEventHandler(this.viewer.cavans)
    3. handler.setInputAction(e => {
    4. console.info('e:', e)
    5. const pick = this.viewer.scene.pick(e.position)
    6. if (Cesium.defined(pick)) {
    7. console.info('pick:', pick.id.id)
    8. }
    9. }, Cesium.ScreenSpaceEventType.LEFT_CLICK)

    执行效果:

     

    如果以上弹窗没有出现,请检查信息盒子是否打开,看下图:

     

     

  • 相关阅读:
    SPOJ 4110 Fast Maximum Flow (最大流模板)
    Helm upgrade 时 no matches for kind “xxxx“ in version “xxxx“ 问题处理
    使用 Abp.Zero 搭建第三方登录模块(一):原理篇
    建模杂谈系列177 APIFunc继续实践-比对研究
    LeetCode-电话号码的字母组合(回溯)
    Linux入门——常见命令
    .NET 6学习笔记(4)——解决VS2022中Nullable警告
    JAVA函数式编程
    大数据面试重点之Kafka(五)
    【AI】数学基础——最优化
  • 原文地址:https://blog.csdn.net/New_Wang/article/details/126877602