Sidereon.GNSS.Antex (Sidereon v0.8.0)

Copy Markdown View Source

Parser and lookup helpers for ANTEX 1.4 receiver and satellite antenna blocks.

The ANTEX parser, satellite validity lookup, and PCO/PCV interpolation live in the Rust GNSS core. This module preserves Sidereon' public structs and API shape.

Summary

Functions

Return an antenna by its TYPE / SERIAL key.

Load and parse an ANTEX file from path.

Like load/1 but raises on failure.

Parse ANTEX text already in memory.

Frequency-dependent PCO (north/east/up in meters).

Like pco/2 but raises on unknown frequency.

Frequency-dependent phase-center variation in meters.

Like pcv/4 but raises on unknown frequency.

Return the satellite antenna block for PRN prn (e.g. "G05") valid at the given epoch, or nil if none.

Types

parse_error()

@type parse_error() :: {:error, term()}

t()

@type t() :: %Sidereon.GNSS.Antex{
  antennas: %{optional(String.t()) => Sidereon.GNSS.Antex.Antenna.t()}
}

Functions

antenna(antex, id)

@spec antenna(t(), String.t()) :: Sidereon.GNSS.Antex.Antenna.t() | nil

Return an antenna by its TYPE / SERIAL key.

load(path)

@spec load(String.t()) :: {:ok, t()} | parse_error()

Load and parse an ANTEX file from path.

load!(path)

@spec load!(String.t()) :: t()

Like load/1 but raises on failure.

parse(text)

@spec parse(binary()) :: {:ok, t()} | parse_error()

Parse ANTEX text already in memory.

pco(antenna, frequency)

@spec pco(Sidereon.GNSS.Antex.Antenna.t(), String.t()) ::
  {:ok, {float(), float(), float()}} | {:error, :unknown_frequency}

Frequency-dependent PCO (north/east/up in meters).

pco!(antenna, frequency)

@spec pco!(Sidereon.GNSS.Antex.Antenna.t(), String.t()) :: {float(), float(), float()}

Like pco/2 but raises on unknown frequency.

pcv(antenna, frequency, zenith_deg, azimuth_deg \\ nil)

@spec pcv(Sidereon.GNSS.Antex.Antenna.t(), String.t(), float(), float() | nil) ::
  {:ok, float()} | {:error, :unknown_frequency}

Frequency-dependent phase-center variation in meters.

Interpolation is linear in zenith and azimuth. Azimuth is optional: when not given (or when the antenna has no azimuth-dependent rows), the NOAZI row is used.

pcv!(antenna, frequency, zenith_deg, azimuth_deg \\ nil)

@spec pcv!(Sidereon.GNSS.Antex.Antenna.t(), String.t(), float(), float() | nil) ::
  float()

Like pcv/4 but raises on unknown frequency.

satellite_antenna(antex, prn, epoch)

@spec satellite_antenna(t(), String.t(), NaiveDateTime.t()) ::
  Sidereon.GNSS.Antex.Antenna.t() | nil

Return the satellite antenna block for PRN prn (e.g. "G05") valid at the given epoch, or nil if none.