Skip to content

坐标和投影

坐标

Cesium.js 使用如下坐标系

  1. WGS84:使用 经纬度+高度 表示位置

  2. 笛卡尔坐标:以地心做为原点

    • X 轴:存在于赤道面,正方向指向 0 度经线
    • Y 轴:存在于赤道面,正方向指向 90 度经线
    • Z 轴:垂直于赤道面,正方向沿着自转轴朝向正北

  3. 屏幕坐标系:以显示器的左上角做为原点

    • X 轴:正方向向右
    • Y 轴:正方向向下

API

Cartographic

以经纬度(弧度)+ 高度 表示位置

// 弧度 => 角度
Cesium.Math.toDegrees();
// 角度 => 弧度
Cesium.Math.toRadians();

Cartesian3 转 Cartographic

Cesium.Ellipsoid.WGS84.cartesianToCartographic(); // 结果是弧度
Cesium.Cartographic.fromCartesian(); // 结果是弧度

Cartesian3

以笛卡尔坐标表示位置

经纬度转 Cartesian3

Cesium.Cartesian3.fromDegrees();
Cesium.Cartesian3.fromRadians();
// Cartographic 转 Cartesian3
Cesium.Cartographic.toCartesian();

Cartesian2 转 Cartesian3

const c2 = new Cesium.Cartesian2(0, 0);
const c3 = viewer.scene.globe.pick(viewer.camera.getPickRay(c2), viewer.scene);

Cartesian2

以屏幕坐标表示位置 Cartesian3 转 Cartesian2

// 该 API 考虑到浏览器的缩放,high-DPI等等因素,即wgs84ToWindowCoordinates转换的坐标可以直接在HTML中使用
Cesium.SceneTransforms.wgs84ToWindowCoordinates();
Cesium.SceneTransforms.wgs84ToDrawingBufferCoordinates();

投影

在 Cesium.js 中,投影就是将 Cartographic 转换为 Cartesian3(反投影就是将 Cartesian3 转换为 Cartographic)。Cesium.js 支持 GeographicProjection,WebMercatorProjection,GK 投影,墨卡托投影等等,常用如下

  • GeographicProjection(图右下):等距圆柱投影。平板投影,所有维度上,面积和形状都有失真,但是保持在纬线上等距(经线上无法保证)。常用做在纬线上的测量
  • WebMercatorProjection(图右上):正轴等角圆柱投影。在近赤道,保持较好的形状和面积,维度越大,形变越大。常用做网络地图

picture 0

API

可以在 Viewer 中设置修改投影,默认为 GeographicProjection

const v = new Cesium.Viewer({
mapProjection: new Cesium.WebMercatorProjection(),
});

MapProjection

MapProjection 为抽象类,有如下实现

GeographicProjection
new Cesium.GeographicProjection(ellipsoid);
WebMercatorProjection
new Cesium.WebMercatorProjection(ellipsoid);

Ellipsoid

用数学公式 (x / a)^2 + (y / b)^2 + (z / c)^2 = 1 来描述一个曲面

  • Ellipsoid.WGS84:描述 WGS84 定义的曲面
  • Ellipsoid.MOON:描述月球曲面

参考