Orbis.Passes (Orbis v0.9.1)

Copy Markdown View Source

Satellite pass prediction over a ground station.

Finds time windows when a satellite is above the local horizon (or a minimum elevation threshold) as seen from a ground station. The algorithm:

  1. Propagate at coarse time steps, computing the elevation angle at each.
  2. When elevation crosses 0 deg (rise), bisect to refine the exact rise time.
  3. Track until elevation crosses 0 deg again (set), bisect to refine.
  4. Find the maximum elevation during the pass via golden-section search.
  5. Optionally discard passes whose max elevation is below :min_elevation.

Elevation is computed through the full topocentric pipeline (TEME→GCRS→topocentric) via Orbis.Coordinates.to_topocentric/3.

Summary

Functions

Predict visible passes of a satellite over a ground station.

Types

ground_station()

@type ground_station() :: %{
  latitude: float(),
  longitude: float(),
  altitude_m: float()
}

pass()

@type pass() :: %{
  rise: DateTime.t(),
  set: DateTime.t(),
  max_elevation: float(),
  max_elevation_time: DateTime.t(),
  duration_seconds: float()
}

Functions

predict(tle, ground_station, start_time, end_time, opts \\ [])

@spec predict(
  Orbis.Elements.t(),
  ground_station(),
  DateTime.t(),
  DateTime.t(),
  keyword()
) :: [pass()]

Predict visible passes of a satellite over a ground station.

Parameters

  • tle — parsed %Orbis.Elements{} struct
  • ground_station%{latitude: deg, longitude: deg, altitude_m: m}
  • start_timeDateTime.t() beginning of the search window
  • end_timeDateTime.t() end of the search window
  • opts — keyword list
    • :min_elevation — minimum peak elevation in degrees to keep a pass (default 0.0)
    • :step_seconds — coarse propagation step in seconds (default 60)

Returns

A list of pass maps sorted by rise time:

[%{
  rise: DateTime.t(),
  set: DateTime.t(),
  max_elevation: float(),       # degrees
  max_elevation_time: DateTime.t(),
  duration_seconds: float()
}]