当前位置: 首页 > article >正文

Cesium中的坐标系

WGS84地理坐标系统

又称世界坐标系,使用经度(longitude)、纬度(latitude)和高度(height)表示位置,其中,

  • 经度范围:-180°到180°
  • 纬度范围:-90°到90°

const wgs84Coordinate = {
    longitude: 116.391311, // 经度
    latitude: 39.907461,   // 纬度
    height: 0              // 高度(米)
};

Cartographic弧度坐标系

基于弧度的坐标表示方式,与WGS84类似,但使用弧度而不是角度,其中,

  • 经度范围:-π到π
  • 纬度范围:-π/2到π/2

// 将WGS84转换为Cartographic
const cartographicPosition = Cesium.Cartographic.fromDegrees(
    wgs84Coordinate.longitude,
    wgs84Coordinate.latitude,
    wgs84Coordinate.height
);

// 也可以直接创建Cartographic坐标
const cartographic = new Cesium.Cartographic(
    Cesium.Math.toRadians(116.391311), // 经度(弧度)
    Cesium.Math.toRadians(39.907461),  // 纬度(弧度)
    0                                  // 高度(米)
);

Cartesian2屏幕坐标系

又称二维平面坐标系,以像素为单位的二维坐标系

  • 原点在屏幕左上角(0,0)
  • X轴向右为正,递增
  • Y轴向下为正,递增
// 创建屏幕坐标点
var windowPosition = new Cesium.Cartesian2(x, y);
// 世界坐标转屏幕坐标:
// 从笛卡尔坐标转换为屏幕坐标
var windowPosition = scene.cartesianToCanvasCoordinates(cartesian3Position);
if (Cesium.defined(windowPosition)) {
    console.log('屏幕坐标 X:', windowPosition.x, 'Y:', windowPosition.y);
}
//屏幕坐标转世界坐标:
// 从屏幕坐标获取射线
var ray = viewer.camera.getPickRay(windowPosition);
// 获取射线与地球表面的交点
var cartesian = viewer.scene.globe.pick(ray, viewer.scene);

Cartesian3笛卡尔空间直角坐标系

以米为单位,使用x、y、z三个分量表示三维空间中的点,其中,

  • 原点在地球中心
  • z轴指向北极
  • x轴指向经度0度和纬度0度的交点
  • y轴与x轴和z轴构成右手坐标系
// 从WGS84转换为Cartesian3
const cartesian3FromWGS84 = Cesium.Cartesian3.fromDegrees(
    wgs84Coordinate.longitude,
    wgs84Coordinate.latitude,
    wgs84Coordinate.height
);

// 从Cartographic转换为Cartesian3
const cartesian3FromCartographic = Cesium.Cartesian3.fromRadians(
    cartographic.longitude,
    cartographic.latitude,
    cartographic.height
);

重要转换函数:

度转度:Cesium.Math.toRadians()

弧度转Cesium.Math.toDegrees()

WGS84转Cartesian3:Cesium.Cartesian3.fromDegrees()

Cartesian3转Cartographic:Cesium.Cartographic.fromCartesian()

WGS84转Cartographic(度转弧度):Cesium.Cartographic.fromDegrees()

具象理解:


http://www.kler.cn/news/367592.html

相关文章:

  • 图集短视频去水印云函数开发实践——小红书
  • 如何理解前端与后端开发
  • 错误:无法推送一些引用到 ‘https://gitee.com/chek_kk/python-electron-app.git‘
  • Redis 哨兵 问题
  • Spring Boot驱动的厨艺社交平台设计与实现
  • canvas-editor首行缩进
  • 基于Arduino的LED亮灭按键控制
  • MySQL优化手段有哪些
  • 算法训练(leetcode)二刷第七天 | 344. 反转字符串、541. 反转字符串 II、54. 替换数字(第八期模拟笔试)
  • 多款云存储平台存在安全漏洞,影响超2200万用户
  • python把一张小图粘贴到一张大图上
  • anaconda jupyter notebook themes install jupyter notebook样式更改,取消页面头部,全屏展示!
  • 鸿蒙网络编程系列36-固定包头可变包体解决TCP粘包问题
  • IBus 和 Fcitx 框架下的rime输入法引擎
  • windows文件拷贝给wsl2的Ubuntu
  • Halcon 3D分割,筛选,矫正
  • 二十三种设计模式之命令模式
  • Vue3 + Pinia:状态管理的全新体验
  • CoGNN(models文件中的CoGNN.py)
  • 【AI大模型】ChatGPT模型原理介绍
  • Mybatis-plus-入门
  • 2024年10月第3个交易周收盘总结
  • 工具_OpenSSL
  • 【微软商店平台】如何将exe打包上传微软商店
  • SpringCloud学习(补漏)
  • 哈希表之哈希数组、HashSet