js cesium 中弧度、角度转化

本文介绍如何使用Cesium获取相机的航向、俯仰和翻滚角度,并将其从弧度转换为角度,以便于理解和应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考如下代码:

const { heading, pitch, roll } = viewer.camera;
console.log({ heading, pitch, roll });
// 弧度
const radians = Cesium.Math.toRadians(heading)
console.log(radians)
// 角度
const degrees = radians * (180 / Math.PI);
console.log(degrees)


### Cesium 中的坐标系及相关概念 Cesium 是一个基于 WebGL 的开源 JavaScript 库,用于创建 3D 地球和地图可视化应用。它支持多种坐标系以满足不同的应用场景需求。 #### 笛卡尔坐标系 (Cartesian3) Cesium 中最常使用的坐标系是 **笛卡尔坐标系**(Cartesian3),这是一种三维空间直角坐标系[^1]。该坐标系定义了一个点在三维空间中的位置,通常由三个分量组成:`x`, `y`, 和 `z`。 - 它适用于描述物体在三维场景中的绝对位置。 - 在 Cesium 中,可以通过 `Cesium.Cartesian3` 类来表示和操作这种类型的坐标。 ```javascript const cartesianPoint = new Cesium.Cartesian3(100, 200, 300); console.log(cartesianPoint.x); // 输出: 100 console.log(cartesianPoint.y); // 输出: 200 console.log(cartesianPoint.z); // 输出: 300 ``` --- #### 地理坐标系 (Cartographic) 另一种重要的坐标系是 **地理坐标系**(Cartographic),其使用经度、纬度和高度来表示地球表面上的位置。 - 经度范围为 [-π, π] 或者 [-180°, 180°]。 - 纬度范围为 [-π/2, π/2] 或者 [-90°, 90°]。 - 高度则是一个浮点数值,单位通常是米。 Cesium 提供了 `Cesium.Cartographic` 来表示此类坐标: ```javascript const cartographicPoint = new Cesium.Cartographic( Cesium.Math.toRadians(-75), // 经度 (-75° 转换为弧度制) Cesium.Math.toRadians(40), // 纬度 (40° 转换为弧度制) 100 // 高度 (单位: 米) ); ``` --- #### 不同坐标系间的转换 Cesium 支持不同坐标系之间的相互转换,这使得开发者可以灵活地处理各种数据源。以下是常见的几种转换方式: ##### 1. Cartographic 到 Cartesian3 通过 `Cesium.Cartesian3.fromDegrees` 方法可以直接将经纬度(角度制)转化为笛卡尔坐标系下的点[^2]: ```javascript const pointInCartesian = Cesium.Cartesian3.fromDegrees(-75, 40, 100); // 结果为一个 Cartesian3 对象 ``` 如果输入的是弧度值,则可使用 `Cesium.Cartesian3.fromRadians`: ```javascript const radiansLongitude = Cesium.Math.toRadians(-75); const radiansLatitude = Cesium.Math.toRadians(40); const pointFromRadians = Cesium.Cartesian3.fromRadians(radiansLongitude, radiansLatitude, 100); ``` ##### 2. 数组形式的数据转换 当需要批量处理多个地理位置时,可以利用以下方法: - `Cesium.Cartesian3.fromDegreesArray`: 接收一个数组,其中交替存储经度和纬度。 - `Cesium.Cartesian3.fromRadiansArray`: 同样接收一个数组,但要求输入为弧度制。 示例代码如下: ```javascript // 使用 fromDegreesArray 进行批量转换 const degreesArray = [-75, 40, -76, 41]; const pointsInCartesian = Cesium.Cartesian3.fromDegreesArray(degreesArray); // 使用 fromRadiansArray 进行批量转换 const radiansArray = [ Cesium.Math.toRadians(-75), Cesium.Math.toRadians(40), Cesium.Math.toRadians(-76), Cesium.Math.toRadians(41) ]; const pointsFromRadians = Cesium.Cartesian3.fromRadiansArray(radiansArray); ``` ##### 3. 屏幕坐标到世界坐标的映射 除了上述两种主要坐标系外,Cesium 还提供了工具函数来进行屏幕像素坐标与世界坐标之间的转换。例如,`scene.pickPosition` 可以用来获取鼠标点击处的世界坐标。 --- #### WGS84 坐标系 Cesium 所采用的基础大地测量模型是 **WGS84** 坐标系,这是一个全球统一的标准椭球体模型[^3]。这意味着所有的地理计算都默认基于此标准执行,从而确保高精度的空间定位能力。 --- ### 总结 Cesium 提供了一套完整的 API 来支持多样的坐标系及其互转功能。无论是简单的单点转换还是复杂的路径绘制,都可以借助这些内置方法轻松完成。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值