How it works
Projections start from a datum: a sphere or, for real work, an ellipsoid such as WGS84,
a smooth shape about 21 km shorter through the poles than across the equator (the
Ellipsoid page exaggerates it). Height above it, the
ellipsoidal height h, is what a GNSS receiver gives. But water does not run downhill on the
ellipsoid. It runs downhill in the earth's gravity, and the level surface of gravity that best fits
mean sea level is the geoid. "Height above sea level", the orthometric height H, is
height above the geoid.
The geoid is lumpy because the earth's mass is: density differences, mostly deep in the mantle,
bend the level surfaces up over extra mass and down over less. The bumps are small, at most about
100 m against a radius of 6371 km, so the globe here exaggerates them (ten thousand times turns
a 100 m low into a 1000 km dent). They do not follow the mountains: the deepest low is over open
ocean south of Sri Lanka, the highest point is over New Guinea, and the Himalaya sit on a modest
geoid.
The height of the geoid above the ellipsoid is the geoid undulation N, and the three
heights add up: h = H + N. The profile draws them along the line between two places: the
ellipsoid is the straight line at zero, the geoid swings above and below it, and the terrain (with
GEBCO) stands on the geoid. Over the sea, the sea surface lies within a metre or two of the geoid
(the difference is the ocean's dynamic topography, which drives the currents).
Profile wall hangs the same profile on the globe, from the ellipsoid up or down to the geoid.
The slope of the geoid is the deflection of the vertical: the angle between a plumb line
and the ellipsoid normal, a few seconds of arc in most places. The readout gives it from the grid's
slope, which at a whole degree is the smooth, long-wavelength part.
The geoid is EGM2008 at whole degrees, every 24th node of PROJ's 2.5 minute grid, read bilinear
as PROJ's vgridshift reads it and checked against PROJ in
test/check-geoid.mjs (the whole degree grid is within about 5 m of the full model).
The PROJ pipeline from ellipsoidal heights (EPSG:4979) to EGM2008 heights (EPSG:4326+3855) is in the
readout. Places on the globe are geocentric positions on WGS84 (on the exaggerated ellipsoid when
flattening is exaggerated) moved N times the exaggeration along the ellipsoid normal.
Hash keys: alon, alat, blon, blat (the
profile's ends), nx (geoid exaggeration), fx (flattening exaggeration),
ell, coast, grat, wall, bm, fit,
cam.
- Pavlis, N. K., Holmes, S. A., Kenyon, S. C. and Factor, J. K. (2012) The development and
evaluation of the Earth Gravitational Model 2008 (EGM2008), J. Geophys. Res. 117, B04406. Model
by the US National Geospatial-Intelligence Agency (NGA).
- The grid
us_nga_egm08_25.tif from cdn.proj.org
(PROJ-data), with
PROJ's
vgridshift as the
reference; the shipped whole degree grid is made by test/make-geoid-fixture.py.
- Terrain from the GEBCO 2026 Grid (GEBCO Compilation Group), from
Source Cooperative; coastlines from
Natural Earth; drawn with
three.js.