Преобразования систем координат в CesiumJS опираются на строгую математическую модель представления пространства, основанную на геоцентрических и локальных системах отсчёта. В основе лежит связка географических координат (широта, долгота, высота), декартовых координат в мировой системе и локальных систем ориентации, применяемых для объектов сцены, камер и 3D-моделей.
Географическая система координат в CesiumJS представлена через структуру Cartographic:
Эта система описывает положение точки на поверхности эллипсоида WGS84, однако не используется напрямую для расчётов в сцене.
Для вычислений применяется геоцентрическая система Earth-Centered, Earth-Fixed (ECEF), в которой начало координат находится в центре Земли, ось X направлена к пересечению экватора и нулевого меридиана, ось Y — к 90° восточной долготы, ось Z — к северному полюсу.
Преобразование между системами выполняется через:
Cartesian3.fromDegrees(longitude, latitude, height)Cartographic.fromCartesian(cartesian)Внутри CesiumJS эти операции учитывают параметры эллипсоида и обеспечивают точную геодезическую конверсию.
Тип Cartesian3 представляет точки в трёхмерном
пространстве ECEF. Все глобальные расчёты сцены — позиционирование
камер, моделей, лучей — выполняются именно в этой системе.
Основные операции:
Пример базового преобразования:
Cartesian3Cartesian3 → позиция в сценеВся визуализация CesiumJS строится вокруг этой модели, так как она исключает неоднозначности, связанные с кривизной Земли.
Для работы с объектами вблизи поверхности Земли используются локальные системы отсчёта. Наиболее распространённая — East-North-Up (ENU), где:
Создание матрицы локального преобразования выполняется через:
Cesium.Transforms.eastNorthUpToFixedFrame(position)Эта функция строит матрицу 4×4, преобразующую локальные координаты объекта в мировые ECEF-координаты.
Локальные системы применяются для:
В CesiumJS основным инструментом трансформации выступают матрицы
Matrix4 и Matrix3.
Matrix4 используется для:
Общая структура:
Типичная цепочка преобразований включает:
Для задания ориентации используется система углов:
Преобразование углов в матрицу выполняется через:
Cesium.Transforms.headingPitchRollToFixedFrameЭта функция строит матрицу, которая объединяет:
Далее результат применяется как modelMatrix для
3D-объектов.
Преобразование между локальной системой объекта и глобальной системой Земли осуществляется через цепочку матричных операций:
Комбинированная модель:
Такая архитектура позволяет размещать объекты на эллипсоиде без потери точности при больших масштабах.
Камера в CesiumJS также оперирует в мировых координатах ECEF, но её ориентация задаётся дополнительными матрицами поворота.
Основные элементы:
Матрица камеры формируется как обратная модельной трансформации сцены. Это позволяет корректно отображать глубину и перспективу при любом положении наблюдателя.
Для представления вращений используется кватернионная алгебра. Кватернионы применяются вместо углов Эйлера для предотвращения эффекта gimbal lock.
Основные операции:
Кватернионы тесно связаны с Matrix3, где матрица может
быть преобразована в quaternion и обратно для вычислений ориентации.
Каждый объект сцены имеет modelMatrix, который
определяет его положение и ориентацию в мире.
Формирование включает:
Типичный процесс:
Matrix4Все координатные преобразования опираются на эллипсоид WGS84. Его параметры определяют:
Это критично при:
CesiumJS выполняет все преобразования с учётом геодезической модели, а не плоской проекции.
Помимо координат точек, преобразуются также направления:
Для этого используются:
Cesium.Matrix3.multiplyByVectorCesium.Cartesian3.normalizeCesium.Cartesian3.crossТакие операции обеспечивают корректную ориентацию объектов относительно кривизны Земли.
Внутренняя структура преобразований строится как многоуровневая система:
Каждый уровень связан матричным преобразованием, а вся сцена представляет собой композицию этих преобразований, обеспечивающую стабильную работу при глобальных масштабах.