What Is SGP4? How Satellite Position Prediction Works
When a tracker says the ISS is "here, now", it rarely detected that position — it computed it. The computation is done by SGP4 (Simplified General Perturbations Model 4), the standard algorithm that turns a TLE into a prediction of where a satellite is and where it is going.
SGP4 is the quiet engine behind nearly every public satellite display: this tracker, the AR sky finder, pass predictions, and CelesTrak’s own visualisations all use it or a close variant. It is worth knowing how it works — and where its limits are.
SGP4 in one paragraph
SGP4 takes a TLE — a snapshot of an orbit at its epoch — and propagates it: it computes the satellite’s position and velocity at any requested time, earlier or later than the epoch. It was developed for the NORAD space-surveillance catalog, is designed specifically to work with NORAD element sets, and remains the de facto standard for public orbital data.
The "perturbations" in the name are the deviations from a perfect ellipse. The "simplified" model captures the big ones at low altitude rather than solving the general three-body problem exactly.
What SGP4 does with a TLE
- Read the element set — inclination, eccentricity, mean motion, epoch, drag term, and the rest — from the TLE’s two lines.
- Build a mean Keplerian orbit: the smooth ellipse the satellite would follow with no perturbing forces.
- Apply the perturbation corrections — atmospheric drag, Earth’s equatorial bulge (the J2 and related oblateness terms), and slow drift of the orbit’s shape and plane.
- Evaluating at the requested time returns a state vector: a three-dimensional position and velocity in an Earth-centred frame.
- Downstream, that vector is rotated with the planet’s spin and projected to give the latitude, longitude, and altitude shown on a map — or azimuth and elevation for a ground observer.
Steps 1-4 are pure SGP4; step 5 is the geometry that this tracker (and its explainer) layers on top.
The forces SGP4 models
- Atmospheric drag — the dominant force at 400 km. Encoded via the TLE’s BSTAR drag term, it is why low orbits decay and why fresh element sets matter.
- Earth’s oblateness (J2 and friends) — the planet is slightly squashed, so its gravity is not perfectly spherical. This slowly rotates the orbit plane over time.
- Slow secular motions — the position of the orbit’s low point and its crossing of the equator drift measurably each revolution.
What it does not model in detail: solar and lunar gravity and solar-radiation pressure. For the ISS these are tiny on the timescales a tracker cares about.
Where SGP4 is accurate — and where it stops
- Very accurate near the epoch: for a well-tracked object like the ISS, propagated positions are within a few kilometres of reality for the first hours to days.
- Errors grow with distance from the epoch — fastest for low orbits where drag is strongest and hardest to model.
- A reboost or debris-avoidance burn invalidates a TLE instantly, because it changes the actual orbit: no algorithm can forecast a commanded engine burn. This is the practical ceiling on prediction accuracy — days out, element sets are merely approximate.
The honest summary: SGP4 is excellent for "where is it now and tonight", usable for this week, and not much more — which is precisely why this site refreshes its element sets every few minutes rather than trusting a single download.
How this tracker uses SGP4
This site runs SGP4 in your browser via the open-source satellite.js port — no server re-propagation needed. Fresh TLEs are fetched from CelesTrak every few minutes; between fetches, SGP4 is re-evaluated once a second to move the map dot, feed the altitude and speed readouts, update the ground track, and drive the AR sky finder.
Because propagation happens locally, the tracker keeps working as a prediction engine even if the network briefly drops — it just uses the last good element set, exactly as a good tracker should.
SGP4 is only as good as its inputs. The what is a TLE? page explains the input format; the Live Telemetry panel on the tracker shows the age of the element set you are currently viewing.
Now that the theory is covered, watch it on the live engine: fresh TLEs, SGP4 evaluated every second, ground track drawn in real time.
Put SGP4 to work — the live tracker re-propagates the orbit every second from fresh element sets.
Open the live trackerSources and further reading
- CelesTrak — SGP4 and TLE documentation
- CelesTrak — official two-line element sets
- satellite.js — JavaScript implementation of SGP4