Satellite Fundamentals
Every satellite image you analyze was captured by a machine in a specific orbit, at a specific altitude, with a specific sensor. Understanding these parameters tells you what the image CAN show and what it CANNOT — which is half the battle in intelligence analysis.
Key References
- Bate, Mueller, White — Fundamentals of Astrodynamics (Dover, 1971) — The classic text on orbital mechanics
- Hoots & Roehrich — Models for Propagation of NORAD Element Sets (1980) — SGP4/SDP4 propagator algorithm
- Schowengerdt — Remote Sensing: Models and Methods for Image Processing (3rd ed., 2007) — Comprehensive sensor and image processing reference
- ESA Copernicus Documentation: https://documentation.dataspace.copernicus.eu/
Orbital Mechanics for Analysts
You don’t need to solve Kepler’s equations. You need to understand what orbit parameters mean for collection.
Altitude Determines Resolution and Coverage
A satellite at lower altitude sees a smaller area but in higher detail. This is optics: angular resolution = wavelength / aperture diameter. From lower altitude, the same angular resolution covers less ground = smaller GSD.
| Orbit | Altitude | Examples | Characteristics |
|---|---|---|---|
| LEO | 300-2000 km | Sentinel-2 (786km), ISS (408km) | High resolution, limited swath, short orbital period (90-120 min) |
| MEO | 2000-35786 km | GPS (20200km), Galileo | Navigation, not imaging |
| GEO | 35786 km | GOES, Meteosat | Fixed position over equator, hemisphere coverage, poor resolution (1-4 km) |
| HEO | Varies | Molniya, Tundra | Loitering over high latitudes, used by Russia for comms |
Key insight: GEO satellites cannot do high-resolution imaging because they’re too far away. At 36000 km altitude, achieving 1m GSD would require a mirror ~45m in diameter. GEO is for weather (km-scale) and communications, not reconnaissance.
Sun-Synchronous Orbits (SSO)
Most Earth observation satellites use sun-synchronous orbits. The orbit plane precesses (rotates) at exactly the rate Earth orbits the Sun, so the satellite crosses the equator at the same local solar time every orbit.
Why this matters for imagery:
- Consistent illumination conditions — every pass has the same sun angle
- Shadows are consistent between revisits, making change detection easier
- Optical sensors typically cross at 10:00-10:30 local time (low enough sun for shadows to reveal 3D structure, high enough for good illumination)
The mechanism: Earth is not a perfect sphere — it bulges at the equator. This bulge causes the orbital plane to precess. By choosing the right inclination (~97-98 degrees for typical EO altitudes), the precession rate matches Earth’s orbital rate around the Sun.
Revisit Time
How often a satellite can image the same location. Depends on:
- Orbital period — ~90-100 minutes for LEO
- Swath width — wider swath = faster coverage of all longitudes
- Constellation size — more satellites = more frequent revisits
- Latitude — orbits converge at poles, so high latitudes get MORE frequent coverage
| System | Satellites | Swath | Revisit (equator) | Revisit (60N, Estonia) |
|---|---|---|---|---|
| Sentinel-2 | 2 | 290 km | 5 days | 3-4 days |
| Landsat 8+9 | 2 | 185 km | 8 days | 5-6 days |
| Planet Dove | ~200 | ~25 km | 1 day | 1 day |
| MAXAR WV-3 | 1 | 13 km | <1 day (off-nadir) | Variable (tasked) |
| Sentinel-1 | 2 | 250 km | 6 days | 3-4 days |
Tasked vs. systematic: Sentinel-2 images systematically — same orbits, same timing. Commercial satellites can be TASKED to point off-nadir at a specific target, which gives more frequent revisit but at worse geometry (distortion from viewing angle).
Orbital Geometry
Nadir — the point directly below the satellite. Imagery at nadir has the best geometry (least distortion).
Off-nadir angle — the angle between nadir and the actual pointing direction. Commercial satellites regularly point 20-45 degrees off-nadir to image targets not directly below. Consequences:
- Longer atmospheric path = more haze/scatter
- Geometric distortion = buildings lean, measurements less accurate
- Different shadow geometry
Swath width — the strip on the ground that the sensor covers in one pass. Wider swath = faster global coverage, but usually lower resolution (larger footprint per detector element).
The Four Resolutions
Every satellite sensor is characterized by four resolution dimensions. See The GEOINT Mind Map for the strategic view.
Spatial Resolution (GSD)
Ground Sample Distance: the area on the ground represented by one pixel.
GSD = (pixel_size * altitude) / focal_length
| GSD | What You Can See | What You Cannot See |
|---|---|---|
| 30m (Landsat) | Cities, large forests, lakes | Individual buildings |
| 10m (Sentinel-2) | Building blocks, large ships, fields | Cars, small buildings |
| 3m (Planet) | Individual large buildings, roads | Vehicles |
| 1m (Commercial) | Vehicles, aircraft, small structures | Vehicle type |
| 0.3m (MAXAR) | Vehicle type, aircraft type, people (as dots) | Faces, license plates |
Spectral Resolution
The number and width of wavelength bands the sensor measures.
- Panchromatic: 1 wide band (usually 450-900nm), highest spatial resolution
- Multispectral: 4-13 bands, standard for analysis (Multispectral Analysis)
- Hyperspectral: 100-200+ narrow bands (~10nm wide), material identification
- Ultraspectral: 1000+ bands (experimental)
Sentinel-2 spectral bands:
| Band | Wavelength (nm) | Resolution | Purpose |
|---|---|---|---|
| B01 | 443 (Coastal) | 60m | Aerosol |
| B02 | 490 (Blue) | 10m | Water, atmosphere |
| B03 | 560 (Green) | 10m | Vegetation peak reflectance |
| B04 | 665 (Red) | 10m | Chlorophyll absorption |
| B05 | 705 (Red Edge 1) | 20m | Vegetation stress |
| B06 | 740 (Red Edge 2) | 20m | Vegetation stress |
| B07 | 783 (Red Edge 3) | 20m | Vegetation stress |
| B08 | 842 (NIR) | 10m | Vegetation structure |
| B8A | 865 (NIR narrow) | 20m | Water vapor, vegetation |
| B09 | 945 (Water vapor) | 60m | Atmospheric correction |
| B11 | 1610 (SWIR 1) | 20m | Moisture, minerals, snow |
| B12 | 2190 (SWIR 2) | 20m | Moisture, minerals |
Temporal Resolution
See revisit table above. Key distinction: revisit (how often the sensor CAN image a location) vs effective revisit (how often you get a USABLE cloud-free image).
In Estonia (60N), winter cloud cover means optical effective revisit can be 2-4 weeks. This is why SAR (cloud-penetrating) is essential for Northern European GEOINT.
Radiometric Resolution
Bit depth determines how many brightness levels the sensor can distinguish.
| Bits | Levels | System |
|---|---|---|
| 8 | 256 | Standard cameras, older satellites |
| 11 | 2048 | SPOT |
| 12 | 4096 | Sentinel-2, Planet |
| 14 | 16384 | Landsat 8/9 |
| 16 | 65536 | Some hyperspectral |
Higher radiometric resolution lets you distinguish subtle differences — shadow vs dark surface, shallow vs deep water. Critical for quantitative analysis like atmospheric correction and surface reflectance retrieval.
Major Satellite Systems
Free Data (Use These)
Sentinel-2 (ESA Copernicus) — Your workhorse for optical analysis.
- 2 satellites (A+B), 786 km altitude, sun-synchronous
- 13 bands, 10/20/60m resolution
- 5-day revisit at equator, 2-3 days at high latitudes
- Data: Copernicus Data Space (dataspace.copernicus.eu)
Sentinel-1 (ESA Copernicus) — Your workhorse for SAR.
- C-band SAR (5.405 GHz), VV+VH polarization
- IW mode: 5x20m resolution, 250 km swath
- Works through clouds, day and night
- Data: Copernicus Data Space
Landsat-9 (NASA/USGS) — Longest running EO program (since 1972!).
- 11 bands, 30m multispectral, 15m panchromatic
- 16-day revisit (8 days combined with Landsat-8)
- 50+ year archive — incredible for historical change analysis
- Data: USGS EarthExplorer (earthexplorer.usgs.gov)
MODIS (NASA) — Wide-area monitoring.
- 36 bands, 250m-1km resolution
- Daily global coverage (Terra and Aqua satellites)
- Best for: fire detection, vegetation phenology, ocean color
Commercial (Know About Them)
MAXAR (WorldView/GeoEye) — Highest optical resolution commercially available.
- 30-50cm GSD, multispectral
- Tasked collection, expensive ($15-35/km^2)
- Used by national intelligence agencies worldwide
Planet (Dove/SkySat) — Daily global coverage.
- Dove: 3m, 4-band, ~200 satellites, daily revisit
- SkySat: 50cm, video capable
- Commercial but research/education access available
Capella Space — Commercial SAR.
- X-band SAR, 50cm resolution
- On-demand collection, very high resolution SAR
Airbus (Pleiades Neo/SPOT) — European commercial.
- Pleiades Neo: 30cm, 4-band + 6 NIR-SWIR bands
- SPOT-7: 1.5m, 6m swath, daily revisit
Python: Orbital Calculations
Compute Revisit from Orbital Parameters
import numpy as np
def compute_revisit(altitude_km, swath_width_km, inclination_deg, n_satellites=1):
"""Estimate revisit time for a sun-synchronous satellite."""
R_earth = 6371 # km
mu = 398600.4418 # km^3/s^2
r = R_earth + altitude_km
period_s = 2 * np.pi * np.sqrt(r**3 / mu)
period_min = period_s / 60
# Orbits per day
orbits_per_day = 86400 / period_s
# Ground track separation at equator
earth_circumference = 2 * np.pi * R_earth # km
# Earth rotates under satellite by one orbit spacing
track_separation_km = earth_circumference / orbits_per_day
# Number of adjacent strips to cover equator
strips_needed = track_separation_km / swath_width_km
# Revisit time (days)
revisit_days = strips_needed / n_satellites
return {
"period_min": period_min,
"orbits_per_day": orbits_per_day,
"track_separation_km": track_separation_km,
"revisit_days": revisit_days,
}
# Sentinel-2
result = compute_revisit(786, 290, 98.6, n_satellites=2)
print("Sentinel-2:")
for k, v in result.items():
print(f" {k}: {v:.1f}")
# Landsat-9
result = compute_revisit(705, 185, 98.2, n_satellites=2)
print("\nLandsat 8+9:")
for k, v in result.items():
print(f" {k}: {v:.1f}")
# Planet (approximate)
result = compute_revisit(475, 25, 97.5, n_satellites=200)
print("\nPlanet Dove constellation:")
for k, v in result.items():
print(f" {k}: {v:.1f}")Predict When a Satellite Passes Over Your Location
import numpy as np
from datetime import datetime, timedelta
def next_pass_estimate(lat, lon, altitude_km=786, swath_km=290,
revisit_days=5, last_known_pass=None):
"""
Rough estimate of when a sun-synchronous satellite next passes over
a given location. For precise predictions, use TLE-based propagators
(e.g., sgp4 library + space-track.org TLEs).
"""
R_earth = 6371
r = R_earth + altitude_km
mu = 398600.4418
period_s = 2 * np.pi * np.sqrt(r**3 / mu)
orbits_per_day = 86400 / period_s
# Sun-synchronous satellites cross equator at ~10:30 local time
# Local time offset from UTC
utc_offset_hours = lon / 15 # rough approximation
# Ascending/descending node times
local_cross_time = 10.5 # hours, descending node (daytime)
utc_cross_time = local_cross_time - utc_offset_hours
# The satellite revisits with period = revisit_days
if last_known_pass is None:
last_known_pass = datetime(2024, 1, 1, int(utc_cross_time),
int((utc_cross_time % 1) * 60))
now = datetime.utcnow()
dt = (now - last_known_pass).total_seconds() / 86400
passes_since = dt / revisit_days
next_pass_offset = (1 - (passes_since % 1)) * revisit_days
next_pass = now + timedelta(days=next_pass_offset)
# Set time to approximate crossing time
next_pass = next_pass.replace(hour=int(utc_cross_time) % 24,
minute=int((utc_cross_time % 1) * 60))
return next_pass
# Tallinn, Estonia
tallinn_lat, tallinn_lon = 59.44, 24.75
next_s2 = next_pass_estimate(tallinn_lat, tallinn_lon)
print(f"Approximate next Sentinel-2 pass over Tallinn: {next_s2}")
print("NOTE: For real predictions, use TLE data from space-track.org with sgp4")Visualize Orbit Ground Track
import numpy as np
import matplotlib.pyplot as plt
def plot_ground_track(altitude_km=786, inclination_deg=98.6, n_orbits=3):
"""Plot ground track of a sun-synchronous satellite."""
R_earth = 6371
mu = 398600.4418
r = R_earth + altitude_km
period = 2 * np.pi * np.sqrt(r**3 / mu)
inc = np.radians(inclination_deg)
earth_rot = 360 / 86164 # deg/s (sidereal)
t = np.linspace(0, period * n_orbits, 10000)
orbit_angle = 2 * np.pi * t / period
lat = np.degrees(np.arcsin(np.sin(inc) * np.sin(orbit_angle)))
lon_inertial = np.degrees(np.arctan2(
np.cos(inc) * np.sin(orbit_angle), np.cos(orbit_angle)
))
lon = (lon_inertial - earth_rot * t) % 360 - 180
fig, ax = plt.subplots(figsize=(14, 7))
scatter = ax.scatter(lon, lat, c=t/60, cmap="plasma", s=0.5)
plt.colorbar(scatter, label="Time (minutes)", ax=ax)
# Mark Tallinn
ax.plot(24.75, 59.44, "r*", markersize=15, label="Tallinn")
ax.set_xlabel("Longitude")
ax.set_ylabel("Latitude")
ax.set_title(f"Ground Track — {altitude_km}km SSO, {inclination_deg}° inc, "
f"{n_orbits} orbits")
ax.set_xlim(-180, 180)
ax.set_ylim(-90, 90)
ax.grid(True, alpha=0.3)
ax.legend()
plt.tight_layout()
plt.savefig("orbit_ground_track.png", dpi=150)
plt.show()
plot_ground_track()Exercises
Exercise 1: Which Satellite Can See Tallinn This Week?
Given that Sentinel-2A last passed over Tallinn on a Monday, determine:
- When will the next Sentinel-2 pass occur?
- If that pass is cloudy, when is the next opportunity?
- Can Sentinel-1 fill the gap? What are the tradeoffs?
Exercise 2: Sentinel-2 vs Planet for Vehicle Detection
A military convoy is reportedly moving through a 50km stretch of road.
- Can Sentinel-2 (10m GSD) detect vehicles? What could it detect about the convoy?
- What resolution do you need to count vehicles?
- Planet Dove (3m) — can it count vehicles? What about vehicle types?
- What revisit would you need to track the convoy’s movement?
Exercise 3: Why GEO Can’t Do High-Res Imaging
Using the GSD formula: GSD = (pixel_size * altitude) / focal_length
- A typical detector pixel is 10 micrometers. At GEO altitude (35786 km), what focal length would you need for 1m GSD?
- What mirror diameter does this imply? (f/D ratio of ~10 for space telescopes)
- Compare to the James Webb Space Telescope mirror (6.5m) — is this feasible?
Self-Test Questions
- Why do sun-synchronous orbits cross the equator at the same local time?
- What is the difference between revisit time and effective revisit time?
- A satellite has 12-bit radiometric resolution. How many brightness levels can it distinguish?
- Why does spatial resolution improve at lower altitude?
- An image was taken at 30 degrees off-nadir. What problems should you expect?
See also: Sensor Types and Imagery | The GEOINT Mind Map Next: Sensor Types and Imagery