Coordinate System

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(...):

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

Once you have a point in cartesian CS you can get the screen position (relative to the canvas) with:

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.