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:
- Propagate at coarse time steps, computing the elevation angle at each.
- When elevation crosses 0 deg (rise), bisect to refine the exact rise time.
- Track until elevation crosses 0 deg again (set), bisect to refine.
- Find the maximum elevation during the pass via golden-section search.
- 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
@type pass() :: %{ rise: DateTime.t(), set: DateTime.t(), max_elevation: float(), max_elevation_time: DateTime.t(), duration_seconds: float() }
Functions
@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{}structground_station—%{latitude: deg, longitude: deg, altitude_m: m}start_time—DateTime.t()beginning of the search windowend_time—DateTime.t()end of the search windowopts— keyword list:min_elevation— minimum peak elevation in degrees to keep a pass (default0.0):step_seconds— coarse propagation step in seconds (default60)
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()
}]