首页 > 建站教程 > 地图,GIS教程 >  cesium笛卡尔坐标系转经纬度正文

cesium笛卡尔坐标系转经纬度

在 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 中笛卡尔坐标到经纬度的转换,适用于空间点定位、标注等场景。