cesium的基础知识 | 坐标和坐标系

929 阅读1分钟

一.坐标系

  1. 2D坐标(屏幕坐标):这个坐标也称为笛卡尔平面坐标,单位是像素,在cesium上可以用new Cesium.Cartesian2(x, y)创建。

  2. 3D坐标:这个是笛卡尔空间坐标,又称为世界坐标,可通过new Cesium.Cartesian3(x, y, z)创建,中心是地球的中心。

  3. 地理坐标(弧度):Cesium中的地理坐标单位默认是弧度制,可通过new Cesium.Cartographic(longitude, latitude, height)创建,其中这里的参数是用弧度表示的经纬度,即经度和纬度。弧度即角度对应弧长是半径的倍数。
    角度转弧度 π/180×角度
    弧度变角度 180/π×弧度

  4. 经纬度坐标(WGS84坐标):坐标原点在椭球的质心

二.坐标转换

/**
 * @method 2d坐标转3d坐标系
 * @param { object } position  {x, y}
 * @param { Viewer } viewer Viewer的实例
 * @returns 3d坐标系
 */
export function coordinate2dTo3d(position, viewer) {
  const cartesian3 = viewer.scene.globe.pick(
    viewer.camera.getPickRay(position),
    viewer.scene
  );
  return cartesian3
}

/**
 * @method 3d坐标转cesium的弧度
 * @param { object } cartesian3  {x, y, z}
 * @returns 弧度的经纬度
 */
export function coordinate3dToRadians(cartesian3) {
  // todo 判断是否为世界坐标
  return Cesium.Cartographic.fromCartesian(cartesian3)
}

/**
 * @method cesium的弧度转经纬度
 * @param { object } radiansObject  {longitude, latitude, height}
 * @returns 经纬度
 */
export function radiansToDegrees(radiansObject) {
  const trasKey = ["height", "latitude", "longitude"]
  const obj = {};
  for (const key in radiansObject) {
    if(trasKey.includes(key)) {
      obj[key] = Cesium.Math.toDegrees(radiansObject[key]);
    }
  }
  return obj
}