Description

The Planet Coverage System provides cell-based heat map analysis of celestial body surface coverage from Remote Sensor components. It manages registered sensors and computes field-of-view (FOV) intersections with planetary surfaces each simulation step, accumulating dwell time and tracking observation resolution per grid cell.

The system supports:

  • Global coverage grids for entire celestial bodies
  • Regional Areas of Interest (AOI) with finer grid resolution
  • Per-sensor and aggregate coverage statistics
  • Resolution tracking (GSD for cameras, FOV footprint for other sensors)
  • Ground object observation and detectability queries

Example Use Cases

  • Earth Observation Missions: Analyze ground track coverage and revisit rates for imaging satellites.
  • Constellation Design: Evaluate coverage completeness and gaps for multi-satellite systems.
  • Target Acquisition: Determine when specific ground objects become observable at required resolution.
  • Mission Planning: Identify coverage windows and optimize sensor pointing schedules.

Module Implementation

Grid Structure

The coverage grid discretizes a celestial body’s surface into latitude and longitude cells. Each cell accumulates dwell time from registered sensors whose FOV includes that cell.

ParameterDescriptionDefault
LatitudeStepsNumber of latitude bands from pole to pole18
LongitudeStepsNumber of longitude bands around the equator36

Cell centers are computed as:

where is latitude, is longitude, , and .

Sensor Registration

Sensors must be explicitly registered with the system for a specific celestial body:

Register(sensor, "earth")

Each registered sensor receives a PlanetCoverageMessage that accumulates coverage data specific to that sensor.

FOV-Surface Intersection

At each simulation step, the system tests whether each grid cell center falls within the sensor’s FOV cone. When the footprint is smaller than a cell, it also casts the boresight and a ring of rays around the FOV rim so a nadir cell is still marked. A cell is considered covered if:

  1. Visibility: The surface point is on the hemisphere facing the sensor:

where is the surface normal and is the direction from the surface point to the sensor.

  1. In FOV: The angle from the sensor boresight to the surface point is within the half-angle:

where is the boresight direction and is the full FOV angle.

Dwell Time Accumulation

For cells within the FOV, coverage values are accumulated as dwell time:

where is the simulation time step. Values represent seconds of observation for per-sensor data, or sensor-seconds for aggregate body coverage (overlapping sensors sum their contributions).

Resolution Tracking

The system tracks the best (minimum) resolution achieved for each cell. Resolution is computed differently based on sensor type:

Camera sensors use Ground Sample Distance (GSD):

where is the slant range to the surface point, is the pixel pitch, and is the focal length.

Other RemoteSensors use FOV ground footprint:

The best resolution per cell is the minimum value observed across all passes (smaller is better).

Total Coverage Fraction

The total coverage fraction is computed as the ratio of cells ever observed to total cells:

This value monotonically increases and does not decrease even if a cell is no longer being observed.

Areas of Interest

For higher-resolution analysis of specific regions, the system supports user-defined Areas of Interest (AOI). Each AOI specifies:

ParameterDescription
BodyNameCelestial body (e.g., “earth”)
MinLatitude / MaxLatitudeBounding box latitude range [deg], in with max greater than min
MinLongitudeWestern edge [deg], in
MaxLongitudeEastern edge [deg], greater than MinLongitude. Values at or above mean the box crosses (for example to is to )
LatitudeSteps / LongitudeStepsGrid resolution within the AOI, each at least

AOIs are created via DefineAreaOfInterest() and return a unique identifier for subsequent queries. MoveAreaOfInterest() relocates an existing box without changing its Id or step counts and clears accumulated dwell for that AOI, because the cells now cover different ground. RemoveAreaOfInterest() deletes the box and its accumulated data. The maximum cell count per AOI is limited by MaxAoiCells (default 250,000) to prevent excessive memory allocation.

The box geometry is written into system metadata (AoiDefinitions) with the coverage messages. After a simulation load, the definitions restore the boxes even when the coverage messages have not been rebound yet, so queries and visualization can use the same regions that were saved.

When querying coverage for a specific coordinate, the system automatically routes to the finest (highest resolution) AOI containing that point. Query longitudes outside are wrapped, including negative values used by a box that crosses .

Query Methods

The system provides several query methods:

MethodReturns
GetCoverageForLatLong(body, lat, lon)Accumulated dwell time [s] at a coordinate
GetSensorCoverageForLatLong(sensor, lat, lon)Per-sensor dwell time [s] at a coordinate
GetSensorResolutionForLatLong(sensor, lat, lon)Best resolution [m] achieved at a coordinate
WasLocationObserved(sensor, lat, lon)Whether the sensor ever observed this location
WasGroundObjectObserved(obj, sensor)Whether the sensor ever observed a ground object
IsGroundObjectDetectable(obj, sensor, size)Whether the sensor achieved sufficient resolution to detect an object of the given size

Assumptions/Limitations

  • The FOV is modeled as a circular cone; rectangular or complex FOV shapes are not supported.
  • Cell centers are tested for FOV inclusion; rim rays mark the hit cell only. Partial cell coverage is not computed.
  • The planetary surface is assumed spherical; terrain elevation is not considered.
  • Grid cells use equal angular spacing; cell area varies with latitude (smaller near poles).
  • An AOI may cross longitude by setting MaxLongitude at or above . A single AOI cannot span a full of longitude, and MinLongitude must stay in .
  • Coverage calculations are performed in parallel and assume sensor states are stable within a time step.
  • Resolution values of zero indicate a cell was never observed, not zero resolution.
  • The system does not model atmospheric effects, cloud cover, or illumination conditions.
  • Occultation by other celestial bodies is not computed (only single-body surface visibility).