A comprehensive guide to the astrodynamics and physics behind OrbitView satellite tracking.
- Coordinate Systems
- Two-Line Element (TLE) Format
- Keplerian Orbital Elements
- SGP4/SDP4 Propagation
- Doppler Effect
- Orbital Decay
- Pass Prediction
- Ground Track Calculation
- Conjunction Analysis
- Lagrange Point Orbits (JWST)
- Orbit Rendering Methodology
- References
OrbitView uses multiple coordinate reference frames for satellite tracking:
The ECI frame is fixed in inertial space with:
- Origin: Earth's center of mass
- X-axis: Vernal equinox direction (♈)
- Z-axis: North pole direction
- Y-axis: Completes right-handed system
The ECF frame rotates with Earth:
- Origin: Earth's center of mass
- X-axis: Prime meridian (0° longitude)
- Z-axis: North pole
- Y-axis: 90° East longitude
Human-readable form:
- Latitude (φ): Angle from equatorial plane (-90° to +90°)
- Longitude (λ): Angle from prime meridian (-180° to +180°)
- Altitude (h): Height above reference ellipsoid (WGS-84)
ECI to ECF conversion uses Greenwich Mean Sidereal Time (GMST):
Where:
-
$\theta_0$ = GMST at epoch -
$\omega_E$ = Earth's rotation rate ($7.292115 \times 10^{-5}$ rad/s)
graph LR
subgraph "Inertial Space"
ECI[ECI: J2000]
end
subgraph "Rotating Frame"
ECF[ECF: WGS-84]
end
subgraph "Surface View"
GEO[Geodetic: Lat/Lon/Alt]
end
ECI -- "(t - t_epoch) * GMST" --> ECF
ECF -- "Reference Ellipsoid" --> GEO
GEO -- "Inverse Geodetic" --> ECF
ECF -- "Precession/Nutation" --> ECI
TLE is the standard format for distributing satellite orbital data, maintained by NORAD.
AAAAAAAAAAAAAAAAAAAAAAAA
1 NNNNNC NNNNNAAA NNNNN.NNNNNNNN +.NNNNNNNN +NNNNN-N +NNNNN-N N NNNNN
2 NNNNN NNN.NNNN NNN.NNNN NNNNNNN NNN.NNNN NNN.NNNN NN.NNNNNNNNNNNNNN
| Column | Description | Example |
|---|---|---|
| 01 | Line Number | 1 |
| 03-07 | Satellite Number | 25544 |
| 08 | Classification | U (Unclassified) |
| 10-11 | Launch Year | 98 |
| 12-14 | Launch Number | 067 |
| 15-17 | Piece of Launch | A |
| 19-20 | Epoch Year | 24 |
| 21-32 | Epoch Day (fractional) | 356.51824815 |
| 34-43 | First Derivative of Mean Motion | .00001234 |
| 45-52 | Second Derivative of Mean Motion | 00000-0 |
| 54-61 | B* Drag Term | 12345-4 |
| 63 | Ephemeris Type | 0 |
| 65-68 | Element Set Number | 999 |
| 69 | Checksum | 5 |
| Column | Description | Symbol | Units |
|---|---|---|---|
| 09-16 | Inclination | i | degrees |
| 18-25 | Right Ascension of Ascending Node | Ω | degrees |
| 27-33 | Eccentricity | e | (decimal assumed) |
| 35-42 | Argument of Perigee | ω | degrees |
| 44-51 | Mean Anomaly | M | degrees |
| 53-63 | Mean Motion | n | revs/day |
| 64-68 | Revolution Number at Epoch |
The six classical orbital elements uniquely define an orbit:
-
Semi-major axis (a): Size of the orbit
a = ∛(μ / n²)Where μ = 398600.4418 km³/s² (Earth's gravitational parameter)
-
Eccentricity (e): Shape (0 = circle, 0 < e < 1 = ellipse)
-
Inclination (i): Tilt relative to equator (0-180°)
- i = 0°: Equatorial (prograde)
- i = 90°: Polar
- i > 90°: Retrograde
-
Right Ascension of Ascending Node (Ω): Rotation in equatorial plane
- Argument of Perigee (ω): Angle from ascending node to perigee
-
Mean Anomaly (M): Current position relative to perigee.
To find the position, we must solve Kepler's Equation:
$$M = E - e \sin(E)$$ Where$E$ is the Eccentric Anomaly.
Orbital Period:
Apogee/Perigee Altitude:
OrbitView uses the SGP4 (Simplified General Perturbations 4) algorithm for orbit prediction.
SGP4 solves the perturbed two-body problem considering:
- Earth's oblateness (J2, J3, J4 harmonics)
- Atmospheric drag (via B* coefficient)
- Deep-space perturbations (SDP4 for high-altitude)
if (orbital_period ≥ 225 minutes):
use SDP4 # Deep space
else:
use SGP4 # Near-Earth
Mean Motion with Secular Effects:
n(t) = n_0 + (3/2) × J2 × n_0 × (R_E/a)² × [(3cos²i - 1) / (1-e²)^(3/2)]
J2 Perturbation on RAAN:
dΩ/dt = -(3/2) × J2 × n × (R_E/a)² × cos(i) / (1-e²)²
| Orbit Type | SGP4 Accuracy | Duration |
|---|---|---|
| LEO | ~1 km | 1-3 days |
| MEO | ~5 km | 1 week |
| GEO | ~10 km | 2 weeks |
sequenceDiagram
participant User as UI/Viewer
participant SGP4 as SGP4 Engine
participant TLE as TLE Data
participant Earth as Coordinate Frame
User->>SGP4: Request Position at Time (t)
TLE->>SGP4: Providing i, Ω, e, ω, M, n
Note over SGP4: Solve Kepler's Equation<br/>M = E - e * sin(E)
SGP4->>SGP4: Calculate Perturbations (J2, J3, J4)
SGP4->>SGP4: Apply Atmospheric Drag (B*)
SGP4->>Earth: Output Position in ECI (TEME)
Earth->>User: Transform to ECF (WGS84)
Radio signals from satellites experience frequency shifts due to relative motion.
Where:
-
$\Delta f$ = Frequency shift (Hz) -
$v_r$ = Radial velocity (m/s) -
$c$ = Speed of light ($299,792,458$ m/s) -
$f_0$ = Transmitted frequency (Hz)
v_r = v⃗_sat · r̂
Where:
v⃗_sat= Satellite velocity vector (ECF)r̂= Unit range vector (satellite - observer)
- v_r < 0: Satellite approaching → Positive frequency shift
- v_r > 0: Satellite receding → Negative frequency shift
OrbitView calculates Doppler for common frequencies:
- ISS APRS: 145.825 MHz
- GPS L1: 1575.42 MHz
- Starlink Ku-band: ~12 GHz
Atmospheric drag causes satellites in LEO to gradually lose altitude.
Rate of semi-major axis decrease:
Simplified using TLE $B^$ term: $$\frac{da}{dt} \approx -B^ \rho a v$$
Exponential atmosphere approximation:
| Altitude (km) | ρ₀ (kg/m³) | Scale Height H (km) |
|---|---|---|
| 200 | 2.789×10⁻¹⁰ | 37.1 |
| 400 | 2.803×10⁻¹² | 58.5 |
| 600 | 1.454×10⁻¹³ | 71.8 |
| 800 | 1.170×10⁻¹⁴ | 124.6 |
Approximate remaining lifetime:
| Model | Complexity | Fidelity | Usage in OrbitView |
|---|---|---|---|
| Exponential | Low | Medium | Real-time Dashboard |
| NRLMSISE-00 | High | Ultra | Offline Analysis (TBD) |
| Harris-Priester | Medium | High | Future Integration |
Note
OrbitView currently uses an Optimized Exponential Model for real-time performance. For satellites below 300km, a scale-height lookup table is used to minimize linear approximation errors.
- J2 Dominance: Model assumes J2 is the primary perturbation. J3/J4 are included in SGP4 but not displayed in the simple perturbations panel.
- Atmospheric Drag: Drag coefficients (
C_D) are estimated based on B* term and may vary during solar maximums. - Maneuvers: OrbitView relies on TLE updates. Impulsive maneuvers between TLE epochs are not modeled.
- Pass Accuracy: Optical visibility assumes a spherical Earth shadow (Umbra). Atmospheric refraction near the horizon (penumbra) is not modeled.
Calculating when a satellite is visible from a ground location.
Azimuth (
Elevation (
- AOS (Acquisition of Signal): Satellite rises above minimum elevation
- LOS (Loss of Signal): Satellite sets below minimum elevation
- TCA (Time of Closest Approach): Maximum elevation point
- Step through time at 60-second intervals
- Calculate elevation at each step
- When elevation crosses threshold (typically 10°):
- Refine timing with smaller steps
- Record AOS/LOS/MaxEl
The ground track is the satellite's subsatellite point traced on Earth's surface.
Convert ECI position to geodetic coordinates:
-
Calculate ECF position: $$\mathbf{r}{ECF} = R_z(-\theta{GMST}) \mathbf{r}_{ECI}$$
-
Convert to geodetic (iterative for WGS-84):
$$\lambda = \text{atan2}(y, x)$$ $$\phi = \text{atan2}(z, \sqrt{x^2 + y^2}) \quad \text{[initial estimate]}$$
Satellite visibility radius on Earth's surface:
For minimum elevation angle
OrbitView detects close approaches (conjunctions) between satellites to evaluate collision risk.
The Euclidean distance between two satellites at time
TimeTo-Closest-Approach (TCA) is found by finding the root of the relative velocity dot product: $$\mathbf{v}{rel} \cdot \mathbf{r}{rel} = 0$$
For deep space missions like the James Webb Space Telescope (JWST), OrbitView models orbits around the Earth-Sun L2 Point.
Located approx. 1.5 million km from Earth in the anti-sunward direction. The position of
JWST does not sit at
OrbitView uses a specialized rendering technique to display satellite orbits accurately in 3D space.
There are two fundamentally different ways to visualize a satellite's path:
| Approach | What It Shows | Use Case |
|---|---|---|
| Ground Track | Path traced on Earth's surface (subsatellite points) | Showing where satellite "covers" on Earth |
| Inertial Orbit | True orbital shape in 3D space (Kepler ellipse) | Showing the actual orbit ring in space |
Geostationary satellites (GEO) orbit at the same rate as Earth rotates. If we calculate each orbit point using that point's GMST (Ground Track approach), GEO satellites appear as:
- A single dot
- A broken line near the equator
- An incomplete path
This is because the satellite's ground track is indeed a single point—it hovers over one location on Earth.
To display the true Kepler orbit ring in space, we "freeze" Earth's rotation at the current moment:
// Calculate GMST once at the current time (epoch)
const fixedGmst = satellite.gstime(currentTime);
// For ALL orbit points, use the SAME GMST
for (let i = 0; i <= pointsPerPeriod; i++) {
const time = new Date(now.getTime() + i * stepSeconds * 1000);
const posEci = propagateToECI(satrec, time);
// Use fixedGmst, NOT satellite.gstime(time)
const posEcf = satellite.eciToEcf(posEci, fixedGmst);
positions.push(toCartesian3(posEcf));
}| Satellite Type | Ground Track | Inertial (Fixed GMST) |
|---|---|---|
| LEO (ISS) | Sinusoidal ground path | Inclined elliptical ring |
| MEO (GPS) | Looping ground path | Circular ring at 20,200 km |
| GEO (TURKSAT) | Single point | Perfect circular ring at 35,786 km |
The transformation from ECI to ECF is:
Where
Ground Track: Each point uses
Inertial Ring: All points use
graph TD
A[SGP4 Propagation] --> B[ECI Position at time t]
B --> C{Rendering Mode}
C -->|Ground Track| D[GMST_t = gstime_t]
C -->|Inertial Orbit| E[GMST_t = gstime_epoch]
D --> F[ECF Position]
E --> F
F --> G[Cesium Cartesian3]
This technique is consistent with how NASA/GMAT and other professional orbit visualization tools render satellite trajectories.
OrbitView aims for high scientific fidelity by implementing industry-standard algorithms. Below are the estimated accuracy bounds for the core models.
- Initial Accuracy: 1-5 km (depending on TLE age)
- Error Growth: ~1-3 km per day (position), ~0.1-1.0 m/s (velocity).
- Validation: Benchmarked against NAVSTAR GPS ephemerides. Residuals typically remain within the 1-sigma uncertainty of the TLE data itself.
- Frequency Accuracy: ±5 Hz at 435 MHz (UHF), ±25 Hz at 2.4 GHz (S-Band).
- Source of Error: Primarily driven by UTC time sync and TLE propagation error.
- Precision: ±15% of remaining lifetime for objects below 400 km.
- Limitations: High sensitivity to solar cycle variations (F10.7 index) and unpredictable atmospheric expansion.
- Timeline Precision: ±5 seconds (AOS/LOS times).
- Elevation Accuracy: ±0.2°.
- Validation: Verified against ISS (Zarya) real-time tracking data and visual observations.
This theoretical framework was compiled and verified by Mehmet Gümüş.
🌐 Website: spacegumus.com.tr
🐙 GitHub: OrbitVieW
-
Vallado, D. A. (2013). Fundamentals of Astrodynamics and Applications (4th ed.). Microcosm Press. ISBN: 978-1881883180
-
Hoots, F. R., & Roehrich, R. L. (1980). Spacetrack Report No. 3: Models for Propagation of NORAD Element Sets. NORAD/USSPACECOM.
-
Kelso, T. S. (2007). Validation of SGP4 and IS-GPS-200D Against GPS Precision Ephemerides. AAS Paper 07-127.
-
CelesTrak - https://celestrak.org/ TLE data source maintained by Dr. T.S. Kelso
-
JPL Horizons - https://ssd.jpl.nasa.gov/horizons/ Ephemeris data for solar system bodies and spacecraft
-
satellite.js - https://github.com/shashwatak/satellite-js JavaScript implementation of SGP4/SDP4
-
CesiumJS - https://cesium.com/platform/cesiumjs/ 3D geospatial visualization platform
This document is part of OrbitView, an open-source satellite tracking application.
Last Reviewed: 2026-02-12