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, WhiteFundamentals of Astrodynamics (Dover, 1971) — The classic text on orbital mechanics
  • Hoots & RoehrichModels for Propagation of NORAD Element Sets (1980) — SGP4/SDP4 propagator algorithm
  • SchowengerdtRemote 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.

OrbitAltitudeExamplesCharacteristics
LEO300-2000 kmSentinel-2 (786km), ISS (408km)High resolution, limited swath, short orbital period (90-120 min)
MEO2000-35786 kmGPS (20200km), GalileoNavigation, not imaging
GEO35786 kmGOES, MeteosatFixed position over equator, hemisphere coverage, poor resolution (1-4 km)
HEOVariesMolniya, TundraLoitering 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:

  1. Orbital period — ~90-100 minutes for LEO
  2. Swath width — wider swath = faster coverage of all longitudes
  3. Constellation size — more satellites = more frequent revisits
  4. Latitude — orbits converge at poles, so high latitudes get MORE frequent coverage
SystemSatellitesSwathRevisit (equator)Revisit (60N, Estonia)
Sentinel-22290 km5 days3-4 days
Landsat 8+92185 km8 days5-6 days
Planet Dove~200~25 km1 day1 day
MAXAR WV-3113 km<1 day (off-nadir)Variable (tasked)
Sentinel-12250 km6 days3-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
GSDWhat You Can SeeWhat You Cannot See
30m (Landsat)Cities, large forests, lakesIndividual buildings
10m (Sentinel-2)Building blocks, large ships, fieldsCars, small buildings
3m (Planet)Individual large buildings, roadsVehicles
1m (Commercial)Vehicles, aircraft, small structuresVehicle 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:

BandWavelength (nm)ResolutionPurpose
B01443 (Coastal)60mAerosol
B02490 (Blue)10mWater, atmosphere
B03560 (Green)10mVegetation peak reflectance
B04665 (Red)10mChlorophyll absorption
B05705 (Red Edge 1)20mVegetation stress
B06740 (Red Edge 2)20mVegetation stress
B07783 (Red Edge 3)20mVegetation stress
B08842 (NIR)10mVegetation structure
B8A865 (NIR narrow)20mWater vapor, vegetation
B09945 (Water vapor)60mAtmospheric correction
B111610 (SWIR 1)20mMoisture, minerals, snow
B122190 (SWIR 2)20mMoisture, 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.

BitsLevelsSystem
8256Standard cameras, older satellites
112048SPOT
124096Sentinel-2, Planet
1416384Landsat 8/9
1665536Some 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:

  1. When will the next Sentinel-2 pass occur?
  2. If that pass is cloudy, when is the next opportunity?
  3. 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.

  1. Can Sentinel-2 (10m GSD) detect vehicles? What could it detect about the convoy?
  2. What resolution do you need to count vehicles?
  3. Planet Dove (3m) — can it count vehicles? What about vehicle types?
  4. 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

  1. A typical detector pixel is 10 micrometers. At GEO altitude (35786 km), what focal length would you need for 1m GSD?
  2. What mirror diameter does this imply? (f/D ratio of ~10 for space telescopes)
  3. Compare to the James Webb Space Telescope mirror (6.5m) — is this feasible?

Self-Test Questions

  1. Why do sun-synchronous orbits cross the equator at the same local time?
  2. What is the difference between revisit time and effective revisit time?
  3. A satellite has 12-bit radiometric resolution. How many brightness levels can it distinguish?
  4. Why does spatial resolution improve at lower altitude?
  5. 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