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);