Coordinate Transformation Systems in CesiumJS

Efficiently managing spatial data requires navigating between different coordinate representations. CesiumJS primarily utilizes two standadr formats for geographic and Cartesian positioning.

Core Coordintae Types

  • Cartographic: Represents a position using geodetic coordinates, defined by longitude (radians), latitude (radians), and height (meters above the WGS84 ellipsoid).
  • Cartesian3: Represents a 3D position in an Earth-Centered, Earth-Fixed (ECEF) reference frame, defined by x, y, and z axes.

Angular Conversions

Cesium internally calculates using radians. When working with standard degree-based inputs, use the built-in math utility:

// Degrees to Radians
const radLong = Cesium.Math.toRadians(116.4);
const radLat = Cesium.Math.toRadians(39.9);

// Radians to Degrees
const degLong = Cesium.Math.toDegrees(radLong);
const degLat = Cesium.Math.toDegrees(radLat);

Geographic (WGS84) and Cartographic Conversion

To convert from human-readable WGS84 degrees to the engine-ready Cartographic format:

const cartoPos = Cesium.Cartographic.fromDegrees(longitude, latitude, height);

// Convert back to degree values
const wgs84 = [
   Cesium.Math.toDegrees(cartoPos.longitude),
   Cesium.Math.toDegrees(cartoPos.latitude),
   cartoPos.height
];

Converting between Cartesian3 and Cartographic

Transforming from 3D space to geodetic coordinates is typically handled via the WGS84 ellipsoid:

// Cartesian3 to Cartographic
const carto = Cesium.Ellipsoid.WGS84.cartesianToCartographic(position3D);

// Cartographic to Cartesian3
const point3D = Cesium.Ellipsoid.WGS84.cartographicToCartesian(carto);

Advanced Coordinate Workflows

Transforming Cartesian3 to WGS84 Degrees

Since no direct method exists, use the ellipsoid transformation as a bridge:

const convertToDegrees = (cartesian) => {
   const cartographic = Cesium.Ellipsoid.WGS84.cartesianToCartographic(cartesian);
   return {
       lng: Cesium.Math.toDegrees(cartographic.longitude),
       lat: Cesium.Math.toDegrees(cartographic.latitude),
       h: cartographic.height
   };
};

Bulk Processing Cartesian Arrays

For performance-sensitive operations involving multiple points, utilize the batch processing method:

const cartographicList = Cesium.Ellipsoid.WGS84.cartesianArrayToCartographicArray(cartesianPoints);

const result = cartographicList.map(item => ({
   lng: Cesium.Math.toDegrees(item.longitude),
   lat: Cesium.Math.toDegrees(item.latitude),
   alt: item.height
}));

Direct WGS84 to Cartesian3

For standard point placement, the high-level constructor is the most performant approach:

const cartesianPoint = Cesium.Cartesian3.fromDegrees(lng, lat, height);

Tags: CesiumJS gis WGS84 3D-Mathematics Coordinates

Posted on Sat, 16 May 2026 09:21:50 +0000 by Kevin3374