Sidereon.Coverage (Sidereon v3.0.0)

Copy Markdown View Source

Batch single-epoch coverage helpers backed by the Rust core.

Summary

Functions

Compute {azimuth_deg, elevation_deg, range_km} for every satellite/station pair.

Compute detailed per-cell results while retaining input satellite row positions.

Types

datetime()

@type datetime() ::
  DateTime.t()
  | NaiveDateTime.t()
  | {{integer(), integer(), integer()}, {integer(), integer(), integer()}}
  | {{integer(), integer(), integer()},
     {integer(), integer(), integer(), integer()}}

detailed_look_cell()

@type detailed_look_cell() ::
  {:ok, {float(), float(), float()}} | {:error, look_angle_error()}

frame_transform_error()

@type frame_transform_error() ::
  {:invalid_input, String.t(), String.t()}
  | {:ut1_outside_coverage, :before_coverage | :after_coverage}

look_angle_error()

@type look_angle_error() ::
  {:invalid_input, String.t(), String.t()}
  | {:init, sgp4_error()}
  | {:propagate, sgp4_error()}
  | {:frame_transform, frame_transform_error()}

look_cell()

@type look_cell() :: {:ok, {float(), float(), float()}} | :error

sgp4_error()

@type sgp4_error() ::
  {:invalid_input, atom(), atom()}
  | {:non_finite_output, atom()}
  | {:invalid_tle, String.t()}
  | {:sgp4, integer()}
  | {:resonance_step_budget, non_neg_integer()}

station()

@type station() ::
  {number(), number(), number()}
  | %{latitude: number(), longitude: number(), altitude_m: number()}

Functions

look_angles(elements, stations, datetime)

@spec look_angles([Sidereon.Elements.t()], [station()], datetime()) :: [[look_cell()]]

Compute {azimuth_deg, elevation_deg, range_km} for every satellite/station pair.

If SGP4 initialization fails, this legacy API raises ErlangError with the typed, unindexed sgp4_error() in error.original. Use look_angles_detailed/3 to retain one row per input satellite when stations are present.

look_angles_detailed(elements, stations, datetime)

@spec look_angles_detailed([Sidereon.Elements.t()], [station()], datetime()) :: [
  [detailed_look_cell()]
]

Compute detailed per-cell results while retaining input satellite row positions.

With stations present, a satellite initialization failure fills that satellite's row with {:error, {:init, sgp4_error()}}. If there are no stations and an initialization fails, no cell can carry the failure, so this function raises ErlangError whose original is {:satellite_initialization, input_index, sgp4_error()}.