Satellite Ground Coverage (space-systems/orbit-mechanics/satellite-coverage)
Use when the task is satellite ground coverage and access analysis:
compute the instantaneous access circle from the orbital altitude and
the minimum elevation angle, estimate the swath width and the coverage
fraction, or evaluate the access time per pass, the revisit time, and
the off-nadir and elevation geometry at a ground station.
Domain quick reference
- Spherical Earth model: Re = 6371 km, orbit radius r = Re +
altitude_km. Coverage numbers shift only a few percent against an
oblate (WGS84) Earth, which matters for precise station masks, not
for first-order coverage sizing.
- Minimum elevation angle eps (deg) is the mask at the ground point;
eps = 0 is horizon access, typical masks run 5-10 deg to clear
terrain and atmosphere.
- Earth central angle eta (deg) of the access circle edge:
eta = 90 - eps - asin((Re / r) * cos(eps)). This is the angular
radius at the Earth center of the circle of ground points that see
the satellite at or above eps.
- Maximum off-nadir angle theta_max = asin((Re / r) * cos(eps)) is the
look angle at the satellite to the access circle edge. The limb
triangle closes with eta + eps + theta_max = 90 deg.
- Swath width: the full access strip across nadir, the spherical arc
W = 2 * Re * eta_rad. The access circle ground radius is Re *
eta_rad.
- Global coverage fraction of one access circle over the whole sphere:
(1 - cos(eta_rad)) / 2. A geostationary satellite at horizon access
covers 42.4% of the globe; a 400 km satellite covers 2.95% at any
instant.
- Worked anchors: 400 km altitude with eps = 0 gives eta = 19.79 deg,
swath 4401.7 km; 500 km with eps = 10 deg gives eta = 14.06 deg,
swath 3126.0 km; GEO (35786 km) with eps = 5 deg gives eta = 76.34
deg, swath 16977.5 km.
- Access time per pass (first-order): T_orbit * (2 * eta_deg / 360)
for a ground point crossing the access circle center; off-center
crossings give shorter times, and the fraction is exact only for a
polar pass over the subsatellite track.
- Revisit time is set by the orbit repeat cycle and the constellation
phasing: a single satellite revisits after the repeat cycle from
ground-track-repeat; adding planes and phasing in a Walker-delta
constellation shortens the worst-case gap to the constellation
revisit time.
Workflow
- Take the orbital altitude in km and the minimum elevation angle in
degrees (0 to 90, usually 5-10).
- Compute the access circle with central_angle and
access_circle_radius_km.
- Estimate the ground coverage width with swath_width and the
off-nadir limit with max_off_nadir.
- Evaluate the coverage fraction with coverage_fraction_global for
globe coverage or coverage_fraction_region for a target region.
- Convert to access time per pass with access_time_per_pass using the
orbital period; compare the revisit time against the orbit repeat
cycle for the mission gap requirement.
- For constellations, treat the Walker-delta pattern (N satellites, P
planes, F phasing) as a coverage ensemble: each satellite carries
its own access circle and the joint coverage fraction rises toward
1.0 as the circles overlap, with the revisit gap set by the largest
hole between circles.
Pitfalls
- Routing link-budget questions here: EIRP, path loss, C/N0, Eb/N0,
and margin belong to communication-link-budget; coverage analysis
sizes geometry, not the radio link.
- Routing repeat-cycle questions here: nodal period, revolutions per
day, and integer repeat cycles belong to ground-track-repeat; the
revisit time read from this leaf assumes the repeat cycle is already
known.
- Routing shadow questions here: beta angle, shadow fraction, and
eclipse duration belong to eclipse-time; an access circle is about
visibility geometry, not sunlight.
- Using degrees in the arc formulas: swath and radius take eta in
radians; feeding the degree value in directly overstates the swath
by a factor of pi / 180.
- Forgetting the elevation mask: the access circle shrinks fast with
eps (500 km: 19.2 deg at eps = 0, 14.1 deg at eps = 10), so a
horizon assumption overstates coverage.
- Treating swath as chord instead of arc: the spherical arc length
2 * Re * eta_rad is the ground distance; the straight-line chord is
shorter and is not the covered strip.
- Summing coverage fractions: instantaneous single-satellite fractions
overlap; global coverage over time needs the ensemble geometry, not
a per-satellite sum.
- Using the solar day instead of the orbital period for access time:
access time per pass scales with the orbital period, not 86400 s.
Behavior contract (gate 3)
The access circle central angle, swath width, off-nadir angle, access
circle radius, coverage fractions, and access time per pass logic is
exercised by the gate 3 contract test: scripts/test_satellite_coverage.py
against scripts/satellite_coverage_logic.py (stdlib unittest, offline).
Run:
python3 scripts/test_satellite_coverage.py
Compliance
- Standards referenced, not reproduced: ECSS series text is copyright
ESA; the access circle, swath, and coverage fraction geometry is
common astrodynamics, summary-only per standards-map.yaml (ecss is a
free ESA download).
- compliance: STANDARDS-REF, gated: false.
1---2name: satellite-coverage3description: Use when you must analyze satellite ground coverage and access geometry: compute the instantaneous access circle central angle for a satellite from the orbital altitude and the minimum elevation angle constraint, estimate the swath width and the coverage fraction of a region or the globe, derive the maximum off-nadir angle and the elevation and look-angle geometry at a ground station, and evaluate the access time per pass and the revisit time. Produces the central angle, swath width, off-nadir angle, access time, and coverage fraction that gate ground station visibility and constellation coverage analysis. Trigger: satellite coverage, coverage analysis, access circle, central angle, swath width, off-nadir angle, elevation angle, revisit time, coverage fraction, ground station visibility.4license: Apache-2.05---67# Satellite Ground Coverage (space-systems/orbit-mechanics/satellite-coverage)89Use when the task is satellite ground coverage and access analysis:10compute the instantaneous access circle from the orbital altitude and11the minimum elevation angle, estimate the swath width and the coverage12fraction, or evaluate the access time per pass, the revisit time, and13the off-nadir and elevation geometry at a ground station.1415## Domain quick reference1617- Spherical Earth model: Re = 6371 km, orbit radius r = Re +18 altitude_km. Coverage numbers shift only a few percent against an19 oblate (WGS84) Earth, which matters for precise station masks, not20 for first-order coverage sizing.21- Minimum elevation angle eps (deg) is the mask at the ground point;22 eps = 0 is horizon access, typical masks run 5-10 deg to clear23 terrain and atmosphere.24- Earth central angle eta (deg) of the access circle edge:25 eta = 90 - eps - asin((Re / r) * cos(eps)). This is the angular26 radius at the Earth center of the circle of ground points that see27 the satellite at or above eps.28- Maximum off-nadir angle theta_max = asin((Re / r) * cos(eps)) is the29 look angle at the satellite to the access circle edge. The limb30 triangle closes with eta + eps + theta_max = 90 deg.31- Swath width: the full access strip across nadir, the spherical arc32 W = 2 * Re * eta_rad. The access circle ground radius is Re *33 eta_rad.34- Global coverage fraction of one access circle over the whole sphere:35 (1 - cos(eta_rad)) / 2. A geostationary satellite at horizon access36 covers 42.4% of the globe; a 400 km satellite covers 2.95% at any37 instant.38- Worked anchors: 400 km altitude with eps = 0 gives eta = 19.79 deg,39 swath 4401.7 km; 500 km with eps = 10 deg gives eta = 14.06 deg,40 swath 3126.0 km; GEO (35786 km) with eps = 5 deg gives eta = 76.3441 deg, swath 16977.5 km.42- Access time per pass (first-order): T_orbit * (2 * eta_deg / 360)43 for a ground point crossing the access circle center; off-center44 crossings give shorter times, and the fraction is exact only for a45 polar pass over the subsatellite track.46- Revisit time is set by the orbit repeat cycle and the constellation47 phasing: a single satellite revisits after the repeat cycle from48 ground-track-repeat; adding planes and phasing in a Walker-delta49 constellation shortens the worst-case gap to the constellation50 revisit time.5152## Workflow53541. Take the orbital altitude in km and the minimum elevation angle in55 degrees (0 to 90, usually 5-10).562. Compute the access circle with central_angle and57 access_circle_radius_km.583. Estimate the ground coverage width with swath_width and the59 off-nadir limit with max_off_nadir.604. Evaluate the coverage fraction with coverage_fraction_global for61 globe coverage or coverage_fraction_region for a target region.625. Convert to access time per pass with access_time_per_pass using the63 orbital period; compare the revisit time against the orbit repeat64 cycle for the mission gap requirement.656. For constellations, treat the Walker-delta pattern (N satellites, P66 planes, F phasing) as a coverage ensemble: each satellite carries67 its own access circle and the joint coverage fraction rises toward68 1.0 as the circles overlap, with the revisit gap set by the largest69 hole between circles.7071## Pitfalls7273- Routing link-budget questions here: EIRP, path loss, C/N0, Eb/N0,74 and margin belong to communication-link-budget; coverage analysis75 sizes geometry, not the radio link.76- Routing repeat-cycle questions here: nodal period, revolutions per77 day, and integer repeat cycles belong to ground-track-repeat; the78 revisit time read from this leaf assumes the repeat cycle is already79 known.80- Routing shadow questions here: beta angle, shadow fraction, and81 eclipse duration belong to eclipse-time; an access circle is about82 visibility geometry, not sunlight.83- Using degrees in the arc formulas: swath and radius take eta in84 radians; feeding the degree value in directly overstates the swath85 by a factor of pi / 180.86- Forgetting the elevation mask: the access circle shrinks fast with87 eps (500 km: 19.2 deg at eps = 0, 14.1 deg at eps = 10), so a88 horizon assumption overstates coverage.89- Treating swath as chord instead of arc: the spherical arc length90 2 * Re * eta_rad is the ground distance; the straight-line chord is91 shorter and is not the covered strip.92- Summing coverage fractions: instantaneous single-satellite fractions93 overlap; global coverage over time needs the ensemble geometry, not94 a per-satellite sum.95- Using the solar day instead of the orbital period for access time:96 access time per pass scales with the orbital period, not 86400 s.9798## Behavior contract (gate 3)99100The access circle central angle, swath width, off-nadir angle, access101circle radius, coverage fractions, and access time per pass logic is102exercised by the gate 3 contract test: scripts/test_satellite_coverage.py103against scripts/satellite_coverage_logic.py (stdlib unittest, offline).104Run:105python3 scripts/test_satellite_coverage.py106107## Compliance108109- Standards referenced, not reproduced: ECSS series text is copyright110 ESA; the access circle, swath, and coverage fraction geometry is111 common astrodynamics, summary-only per standards-map.yaml (ecss is a112 free ESA download).113- compliance: STANDARDS-REF, gated: false.