В CesiumJS вся пространственная математика опирается на эллипсоидальную модель Земли, где поверхность не считается плоской или сферической, а представляется сжатым вращением эллипсоида. Базовая геодезическая система координат строится вокруг представления WGS84, обеспечивающего высокую точность для глобальных вычислений.
Ключевая особенность заключается в том, что все операции перехода между декартовыми и геодезическими координатами, а также вычисления расстояний, направлений и интерполяций выполняются с учётом кривизны поверхности.
Эллипсоид в CesiumJS задаётся полуосями:
Модель WGS84:
В коде CesiumJS используется объект Ellipsoid, чаще
всего Ellipsoid.WGS84.
const ellipsoid = Cesium.Ellipsoid.WGS84;
Эллипсоид определяет геометрию преобразований:
Используется для внутренней математики WebGL и сцены:
const cartesian = new Cesium.Cartesian3(1.0, 2.0, 3.0);
Определяется долготой, широтой и высотой:
const cartographic = new Cesium.Cartographic(
Cesium.Math.toRadians(37.6173),
Cesium.Math.toRadians(55.7558),
0
);
Преобразования:
const cartesian = Cesium.Cartesian3.fromRadians(
longitude,
latitude,
height
);
const cartographic = Cesium.Cartographic.fromCartesian(cartesian);
На эллипсоиде расстояние между двумя точками не является прямой линией в пространстве. Используется геодезическая линия — кратчайший путь по поверхности.
CesiumJS предоставляет EllipsoidGeodesic, реализующий
вычисления дуги большого круга на эллипсоиде.
const start = Cesium.Cartographic.fromDegrees(0.0, 0.0);
const end = Cesium.Cartographic.fromDegrees(30.0, 40.0);
const geodesic = new Cesium.EllipsoidGeodesic(start, end);
const distance = geodesic.surfaceDistance;
Объект EllipsoidGeodesic оперирует нормализованной
параметризацией пути.
Основные свойства:
surfaceDistance — длина дуги по поверхностиstartHeading — начальный азимутendHeading — конечный азимутconsole.log(geodesic.surfaceDistance);
console.log(geodesic.startHeading);
console.log(geodesic.endHeading);
Азимут определяется относительно северного направления по локальной касательной плоскости эллипсоида.
CesiumJS позволяет получать промежуточные точки на геодезической линии через параметр t ∈ [0, 1].
const result = new Cesium.Cartographic();
for (let i = 0; i <= 10; i++) {
const t = i / 10;
geodesic.interpolateUsingFraction(t, result);
const lon = Cesium.Math.toDegrees(result.longitude);
const lat = Cesium.Math.toDegrees(result.latitude);
}
Такая интерполяция используется для:
Линейная интерполяция в Cartesian3:
const lerp = Cesium.Cartesian3.lerp(a, b, t, new Cesium.Cartesian3());
Проблема подхода:
Геодезическая интерполяция:
Для приведения произвольной точки к поверхности используется:
const onSurf ace = ellipsoid.scaleToGeodeticSurface(cartesian);
Функция:
Пример нормали:
const normal = ellipsoid.geocentricSurfaceNormal(cartesian);
Нормаль важна для:
Азимут на эллипсоиде отличается от плоской геометрии. В CesiumJS направление вычисляется через геодезическую задачу между двумя точками.
const geodesic = new Cesium.EllipsoidGeodesic(start, end);
const initialBearing = geodesic.startHeading;
const finalBearing = geodesic.endHeading;
Поведение:
Для визуализации длинных маршрутов используется дискретизация:
const positions = [];
for (let i = 0; i <= 50; i++) {
const t = i / 50;
const p = new Cesium.Cartographic();
geodesic.interpolateUsingFraction(t, p);
positions.push(
Cesium.Cartesian3.fromRadians(p.longitude, p.latitude)
);
}
Эти сегменты затем используются в:
PolylineGeometryEntity polylineПри работе с эллипсоидом возникают особенности:
CesiumJS компенсирует это через:
На глобальных масштабах эллипсоидальная геометрия демонстрирует значительные отличия от плоской:
Пример вычисления маршрута между континентами:
const a = Cesium.Cartographic.fromDegrees(-74.0, 40.7);
const b = Cesium.Cartographic.fromDegrees(139.7, 35.6);
const geo = new Cesium.EllipsoidGeodesic(a, b);
console.log(geo.surfaceDistance);
Эллипсоид используется не только для глобальных вычислений, но и для локальных систем координат:
Пример базового преобразования:
const transform = Cesium.Transforms.eastNorthUpToFixedFrame(cartesian);
Эта матрица строится с учётом нормали эллипсоида и используется для ориентации объектов на поверхности.
Касательная плоскость определяется в точке на эллипсоиде и служит локальной аппроксимацией поверхности.
Компоненты:
Эта система используется для:
Геодезические вычисления напрямую влияют на визуализацию:
При рендеринге глобуса используется комбинация:
Поверхность эллипсоида в CesiumJS является математической абстракцией, поверх которой накладываются:
Эллипсоид остаётся базовым уровнем, обеспечивающим: