Observation Geometry¶
Calculate azimuth and elevation independently of TEC, using broadcast navigation loaded once with read_rinex_nav.
The TEC Calculation guide shows the complete workflow.
compute_az_el ¶
compute_az_el(
observations: DataFrame | LazyFrame,
header: RinexObsHeader,
navigation: NavigationData,
*,
overwrite: bool = False,
) -> pl.LazyFrame
Append satellite azimuth and elevation to observations from one station.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
observations
|
DataFrame or LazyFrame
|
Wide or long observations with time, station and prn. Time must be timezone-aware UTC or timezone-naive GPS. Existing rx_lat/rx_lon columns override header coordinates in degrees; height follows the header's receiver history in metres. |
required |
header
|
RinexObsHeader
|
Observation time-scale and receiver-position metadata. |
required |
navigation
|
NavigationData
|
Broadcast ephemerides loaded by read_rinex_nav. Reuse this object across calls to avoid repeated decoding and indexing. |
required |
overwrite
|
bool
|
Replace both angle columns if either already exists. False raises rather than mixing existing and newly computed angles. |
False
|
Returns:
| Type | Description |
|---|---|
LazyFrame
|
Original rows, columns and time values plus Float64 azimuth/elevation in degrees. Azimuth is clockwise from north in [0, 360); elevation is in [-90, 90]. Unavailable geometry is null; no elevation filter or TEC quality control is applied. Query collection and satellite propagation complete before return; angle evaluation remains lazy. |
Raises:
| Type | Description |
|---|---|
TypeError
|
If navigation is not NavigationData or time is not Datetime. |
ValueError
|
If required columns are absent, time/PRN is invalid, multiple stations are present, or existing angle columns would be overwritten. |