# Coordinate System

### From World Wind Wiki

### Coordinate System

WWJ uses an ECEF Cartesian coordinate system. Conversions from geodetic (lat, lon, altitude) to Cartesian are computed in the globe class (*EllipsodialGlobe.geodeticToCartesian(...)*), where the conversion is essentially applying an Equirectangular projection (or the reverse in the case of geodeticToCartesian()). WWJ uses WGS84 as a means to establish the center and orientation of the earth.

As described in the javadoc of method *EllipsodialGlobe.geodeticToCartesian(...)*:
// The code below maps latitude / longitude position to globe-centered Cartesian coordinates.
// The Y axis points to the north pole. The Z axis points to the intersection of the prime
// meridian and the equator, in the equatorial plane. The X axis completes a right-handed
// coordinate system, and is 90 degrees east of the Z axis and also in the equatorial plane.

Positions (lat/lon/elev) are transformed to points (represented in Vec4 instances) in the cartesian coordinate system used by OpenGL. Next methods transforms from Position to point and from point to Position.

Vec4 point = globe.computePointFromPosition(lat, lon, elevation); Position pos = globe.computePositionFromPoint(point);

When performing custom transformations (in a *render()* method for example), the modelview matrix has been transformed to orient the axises to the center of the earth prior to the render call. It's easier to transform geometry using a local world origin, which is established by calling *View.pushReferenceCenter()* (the referenceCenter argument is in world coordinates). One must call *popReferenceCenter()* afterwards. A call to View.get*Matrix returns the same matrix as if I asked the opengl pipeline for it.