经纬志
首页 / Cesium / API 文档

Ellipsoid

先看结论

参考椭球。所有经纬度与笛卡尔坐标的换算最终都落在这个三轴椭球上, Cesium 默认使用 WGS84。

最后验证 2026-11-03 · CesiumJS 1.121 · 更新 2026-10-29 · 引用本文
new Cesium.Ellipsoid(x, y, z)

构造参数

参数默认说明
x0.0赤道半径,米
y0.0赤道半径,米;与 x 不等时形成旋转椭球
z0.0极半径,米

预置实例

常量说明
Ellipsoid.WGS84长半轴 6378137.0 米、扁率 1/298.257223563,Cesium 的默认椭球
Ellipsoid.UNIT_SPHERE半径全为 1 的球,用于归一化方向计算
Ellipsoid.MOON月球椭球,半径约 1737400 米

属性

属性说明
radii三轴半径,Cartesian3
radiiSquared半径平方,换算中的中间量
radiiToTheFourth半径四次方
oneOverRadii半径的倒数
oneOverRadiiSquared半径平方的倒数
minimumRadius三轴中的最小值,米
maximumRadius三轴中的最大值,米

坐标换算

方法返回说明
cartographicToCartesian(cartographic, result)Cartesian3经纬高转椭球面三维坐标
cartesianToCartographic(cartesian, result)Cartographic三维坐标转经纬高;不在椭球上时高度为相对椭球面的值
cartographicArrayToCartesianArray(cartographics, result)Array批量转换
cartesianArrayToCartographicArray(cartesians, result)Array批量反向转换
geodeticSurfaceNormal(cartesian, result)Cartesian3该点处的椭球法线,单位向量
geodeticSurfaceNormalCartographic(cartographic, result)Cartesian3仅由经纬度求法线,无需先转笛卡尔
scaleToGeodeticSurface(cartesian, result)Cartesian3把点压到椭球面上的最近点
scaleToGeocentricSurface(cartesian, result)Cartesian3沿地心方向压到椭球面,与法线方向不同
transformPositionToScaledSpace(position, result)Cartesian3转到单位球空间,常用于法线与光照计算

示例:投影到地面

var ellipsoid = Cesium.Ellipsoid.WGS84;

var carto = Cesium.Cartographic.fromDegrees(116.39, 39.90, 320);
var position = ellipsoid.cartographicToCartesian(carto);

// 把悬空的点压回地面,保持经纬度不变
var onSurface = ellipsoid.scaleToGeodeticSurface(position);

// 该点的地面法线,可直接用于构造朝向矩阵
var normal = ellipsoid.geodeticSurfaceNormal(onSurface);

var heading = Cesium.Math.toRadians(30);
var transform = Cesium.Transforms.headingPitchRollToFixedFrame(
  onSurface,
  new Cesium.HeadingPitchRoll(heading, 0, 0),
  ellipsoid
);

换用其他天体

用 viewer.scene.globe.ellipsoid 可以拿到当前椭球, 切换月球或火星数据时它会随场景改变。把 Ellipsoid.WGS84 写死在业务代码里,换天体后所有坐标都会偏移。

高度不是海拔。cartesianToCartographic 得到的高度是相对椭球面的大地高, 与地形瓦片给出的海拔存在差异。做高程查询时用 sampleTerrain, 不要拿椭球换算的结果当海拔。

引用本文

经纬志(2026)。《Ellipsoid》。https://www.jingweizhi.com/cesium/api/ellipsoid.html(访问日期 2026-11-03)。