GPS gives you 'height above ellipsoid'. Maps want 'height above mean sea level' (i.e. geoid). The two differ by up to ~100 m. This week is the science of fixing that.
Geodesy is the science of Earth's exact size, shape, and gravity field. For everyday GIS, the simplification "Earth is a sphere" is fine. For sub-meter accuracy — which space GIS routinely needs — the simplification fails. This week is the geodesic primer: ellipsoids, geoids, height systems, and the EGM2008 model that maps between them.
Earth is not a sphere. It bulges at the equator and flattens at the poles, by roughly 21 km (the equatorial radius is 6,378 km; the polar radius is 6,357 km). The mathematically tractable approximation is an ellipsoid of revolution, defined by two parameters: equatorial radius (a) and flattening (f). The WGS84 ellipsoid is the GPS-standard model:
a = 6378137.0 m (equatorial radius)
f = 1 / 298.257223563 (flattening)
b = a × (1 - f) = 6356752.3 m (polar radius)
Almost every modern coordinate system you'll touch uses the WGS84 ellipsoid (or its near-identical GRS80 cousin). Some legacy systems (Clarke 1866, Bessel 1841, Airy 1830) used different ellipsoids that differ by tens of meters — relevant when working with pre-1980s topographic maps.
The ellipsoid is purely geometric. The geoid is physical: it's the equipotential surface of Earth's gravity field that, on average, coincides with mean sea level over the oceans. Imagine extending this gravity surface through the continents — that's the geoid. Water flows downhill relative to the geoid, not relative to the ellipsoid.
Critically, the geoid is not smooth. Earth's gravity field is bumpy because the mass distribution under the surface is uneven (mountain roots, dense ocean basins, sedimentary basins). The geoid undulates by ±100 meters relative to the WGS84 ellipsoid:
For any point on Earth, you have three "height" values:
H = h - N.A 5,000 m mountain on a topo map has H = 5000 m. Its GPS receiver, however, might report h = 5040 m or 4970 m depending on the local geoid undulation. The 70 m discrepancy is geoid offset.
EGM2008 (Earth Gravitational Model 2008, by NGA) is the standard global geoid model, derived from satellite gravity, ground gravity, and altimetry. It's a spherical harmonic expansion to degree and order 2,159, with a typical accuracy of ±15 cm. It's the default in pyproj and almost every GIS library.
from pyproj import Transformer
# Ellipsoid height (from GPS) → orthometric height (above EGM2008 geoid)
to_orthometric = Transformer.from_crs('EPSG:4979', 'EPSG:4326+5773', always_xy=True)
lon, lat, h = -118.6, 36.5, 4421 # Mt. Whitney, GPS-measured
lon, lat, H = to_orthometric.transform(lon, lat, h)
print(f"Orthometric height: {H:.1f} m") # ≈ 4421 - N(36.5N, -118.6) ≈ 4393 m
For most space-domain applications, ellipsoidal height is fine. The exceptions:
You'll take a set of GPS-measured points along the Sierra Nevada (provided), compute their ellipsoidal heights, apply EGM2008 geoid correction to get orthometric heights, and compare with USGS-published orthometric heights at the same coordinates. The agreement should be within ±2 m if the GPS measurements were of survey quality. By the end, you'll never confuse the three heights again.
Take a set of GPS-measured points along the Sierra Nevada. Compute their ellipsoidal height. Apply EGM2008 geoid correction. Compare with USGS-published orthometric heights.
Test yourself. Answer key on the certificate-track page (Gold-tier feature: progress tracking and auto-grading).