Cesium 根据鼠标点击生成点击点的坐标信息

Cesium 根据鼠标点击生成点击点的坐标信息

    • 一、需求
    • 二、分析
      • [1. 创建鼠标点击事件](#1. 创建鼠标点击事件)
      • [2. 点击生成坐标但不是经纬度,而是笛卡尔坐标系下的坐标,这个时候需要做一次转换](#2. 点击生成坐标但不是经纬度,而是笛卡尔坐标系下的坐标,这个时候需要做一次转换)
      • [3. 完整代码](#3. 完整代码)
    • 三、数据保存

一、需求

在日常开发中 ,会遇到根据鼠标点击生成对应点的坐标信息的情况

二、分析

1. 创建鼠标点击事件

javascript 复制代码
var handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas); // 创建鼠标事件handler

handler.setInputAction(function(click) { // 监听鼠标左键点击事件
    var cartesian = viewer.camera.pickEllipsoid(click.position, viewer.scene.globe.ellipsoid); // 获取点击位置的地球坐标
    if (cartesian) {
        var entity = viewer.entities.add({ // 在该位置添加点
            position: cartesian,
            point: {
                pixelSize: 10,
                color: Cesium.Color.YELLOW
            }
        });
        console.log('点的位置:', cartesian);
    }
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);
 

2. 点击生成坐标但不是经纬度,而是笛卡尔坐标系下的坐标,这个时候需要做一次转换

javascript 复制代码
// 将 point 转换为单位向量
var length = Cesium.Cartesian3.magnitude(point);
var unitVector = Cesium.Cartesian3.divideByScalar(point, length, new Cesium.Cartesian3());

// 计算经纬度坐标
var cartographic = Cesium.Cartographic.fromCartesian(point);
var longitude = Cesium.Math.toDegrees(cartographic.longitude);
var latitude = Cesium.Math.toDegrees(cartographic.latitude);
var altitude = cartographic.height;

// 输出结果
console.log("经度:" + longitude);
console.log("纬度:" + latitude);
console.log("高度:" + altitude);
 

3. 完整代码

js 复制代码
var tempList = [];
// 创建鼠标事件handler
var handler = new Cesium.ScreenSpaceEventHandler(window.viewer.scene.canvas); 
handler.setInputAction(function(click) { // 监听鼠标左键点击事件
    // 获取点击位置的地球坐标
    var cartesian = window.viewer.camera.pickEllipsoid(click.position, window.viewer.scene.globe.ellipsoid);
    // 转换为笛卡尔坐标系 
    let cartographic1 = Cesium.Cartographic.fromCartesian(cartesian);
    // 转换为经纬度
    var latitude = Cesium.Math.toDegrees(cartographic1.latitude);
    var longitude = Cesium.Math.toDegrees(cartographic1.longitude);
    console.log(1001,longitude,latitude)
    tempList.push(longitude,latitude)
    // 控制点击生成两个点
    if ( tempList.length <=4) {
      if (cartesian) {
          var entity = window.viewer.entities.add({ // 在该位置添加点
              position: cartesian,
              point: {
                  pixelSize: 10,
                  color: Cesium.Color.YELLOW
              }
          });
          
      }
    }
  }, Cesium.ScreenSpaceEventType.LEFT_CLICK);

三、数据保存

javascript 复制代码
因为在监听鼠标点击的时候是无法获取到 this 的,所以需要
const that=this

可以看这篇文章进行数据的存储与监听:数据存储,点击跳转

相关推荐
每周报刊4 小时前
竞速座舱级视界:爱攻 AGP497UCZD 超宽 QDOLED 显示器解析
数据结构·游戏·计算机外设
小幂同学1 天前
笔记本触控板能用鼠标连点器吗?快捷键与位置问题解析
计算机外设·鼠标连点器·连点器
集芯微电科技有限公司2 天前
700V/17A高频开关低导通阻GaN HEMT驱动器适用于快充,LLC,PFC功率校正
人工智能·嵌入式硬件·深度学习·神经网络·机器学习·生成对抗网络·计算机外设
科技每日热闻3 天前
爱攻AGON霸天Max QD-OLED曲面电竞显示器AGP497UCZD重磅上市
科技·计算机外设
CoreTK_EMC3 天前
显示器 EMC 整改:干扰溯源、多接口处理与量产工程实践
计算机外设·芯通康·显示器 emc 整改·lvds edp emc·显示器 re 辐射超标·hdmi 接口 esd·显示器花屏闪屏
云上工程笔记3 天前
4K 显示器只能跑 30Hz 怎么办:从刷新率、HDMI 接口到线材的排查方法
计算机外设
zhonyu鱼3 天前
Escrcpy:用电脑键盘鼠标操作安卓手机的跨平台投屏工具
android·计算机外设·电脑
荣合技术服务3 天前
安装Windows Server 2008系统时 USB 鼠标键盘无法操作的解决方案
服务器·计算机外设·windows2008
呉師傅5 天前
关于惠普LaserJet1018打印机在Windows11上打印颜色偏淡的问题解决方法
运维·服务器·windows·计算机外设·电脑
DevHub5 天前
STM32 USB HID 教程:TinyUSB 实现键盘设备,从描述符到枚举
arm开发·stm32·单片机·嵌入式硬件·mcu·计算机外设