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.
| Parameter | Description | Default |
|---|---|---|
LatitudeSteps | Number of latitude bands from pole to pole | 18 |
LongitudeSteps | Number of longitude bands around the equator | 36 |
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:
- 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.
- 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:
| Parameter | Description |
|---|---|
BodyName | Celestial body (e.g., “earth”) |
MinLatitude / MaxLatitude | Bounding box latitude range [deg], in with max greater than min |
MinLongitude | Western edge [deg], in |
MaxLongitude | Eastern edge [deg], greater than MinLongitude. Values at or above mean the box crosses (for example to is to ) |
LatitudeSteps / LongitudeSteps | Grid 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:
| Method | Returns |
|---|---|
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
MaxLongitudeat or above . A single AOI cannot span a full of longitude, andMinLongitudemust 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).