在 Cesium 中,将笛卡尔坐标系(Cartesian3,基于三维直角坐标的世界坐标)转换为经纬度(度数)可以通过内置的坐标转换工具实现。以下是具体的实现方法:
核心原理
Cesium 中,笛卡尔坐标(Cartesian3)表示三维空间中的点(x, y, z),而经纬度通常使用Cartographic类型表示(包含经度、纬度、高度,单位为弧度),最后需将弧度转换为度数。
转换代码示例
// 引入Cesium(假设已正确加载Cesium库) // import * as Cesium from 'cesium'; /** * 将Cesium笛卡尔坐标转换为经纬度(度数) * @param {Cesium.Cartesian3} cartesian - 笛卡尔坐标点 * @returns {Object} 包含经度、纬度、高度的对象(单位:度) */ function cartesianToLatLng(cartesian) { if (!Cesium.defined(cartesian)) { throw new Error('请传入有效的Cartesian3坐标'); } // 1. 笛卡尔坐标转弧度制的经纬度(Cartographic) const cartographic = Cesium.Cartographic.fromCartesian(cartesian); // 2. 弧度转度数 const longitude = Cesium.Math.toDegrees(cartographic.longitude); // 经度(度) const latitude = Cesium.Math.toDegrees(cartographic.latitude); // 纬度(度) const height = cartographic.height; // 高度(米) return { longitude: longitude, latitude: latitude, height: height }; } // 示例用法 // 假设存在一个笛卡尔坐标点 const point = new Cesium.Cartesian3(1234567, 4567890, 7890123); try { const latLng = cartesianToLatLng(point); console.log(`经度:${latLng.longitude.toFixed(6)}°`); console.log(`纬度:${latLng.latitude.toFixed(6)}°`); console.log(`高度:${latLng.height.toFixed(2)}米`); } catch (e) { console.error(e.message); }
代码解析
1、坐标转换核心函数:Cesium.Cartographic.fromCartesian(cartesian) 是将笛卡尔坐标转换为弧度制经纬度(Cartographic)的关键方法,包含经度(longitude)、纬度(latitude)、高度(height)三个属性。
2、弧度转度数:Cesium 中经纬度默认以弧度存储,需通过 Cesium.Math.toDegrees() 转换为常用的度数单位。
3、异常处理:使用 Cesium.defined() 检查输入是否为有效坐标,避免转换错误。
注意事项
确保 Cesium 库已正确加载,且坐标系基于 WGS84(Cesium 默认坐标系,与 GPS 一致)。
高度(height)单位为米,指该点相对于椭球面的高度。
实际使用时,需根据具体场景处理坐标是否在地球表面范围内(例如避免转换无效的空间点)。
通过以上方法,可快速实现 Cesium 中笛卡尔坐标到经纬度的转换,适用于空间点定位、标注等场景。