坐标和投影
坐标
Cesium.js 使用如下坐标系
-
WGS84:使用 经纬度+高度 表示位置
-
笛卡尔坐标:以地心做为原点
- X 轴:存在于赤道面,正方向指向 0 度经线
- Y 轴:存在于赤道面,正方向指向 90 度经线
- Z 轴:垂直于赤道面,正方向沿着自转轴朝向正北

-
屏幕坐标系:以显示器的左上角做为原点
- 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 转 Cartesian3Cesium.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(图右上):正轴等角圆柱投影。在近赤道,保持较好的形状和面积,维度越大,形变越大。常用做网络地图

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:描述月球曲面