Sidereon.GNSS.PreciseEphemeris.Interpolant (Sidereon v0.13.0)

Copy Markdown View Source

Cached precise-ephemeris interpolant and batched satellite-state queries.

A parsed SP3 product or a sample-built precise source can be converted into a persistent interpolant handle. The handle copies the interpolation nodes once, then serves repeated GNSS satellite-state queries without re-gathering the nodes from the source product.

State batches return satellite positions in ITRF/IGS ECEF metres and satellite clocks in seconds. Query epochs are seconds since J2000 in the source's own time scale.

Summary

Functions

Build a cached interpolant from a sample-backed precise ephemeris source.

Build a cached interpolant directly from precise ephemeris samples.

Build a cached interpolant from a parsed SP3 product.

Return the satellite ids available in the cached interpolant.

Evaluate states for parallel satellite and epoch arrays.

Evaluate states for many satellites at one shared J2000-second epoch.

Return the source time-scale abbreviation, such as "GPST".

Types

source()

t()

@type t() :: %Sidereon.GNSS.PreciseEphemeris.Interpolant{
  handle: reference(),
  time_scale: String.t()
}

Functions

from_precise_ephemeris_samples(precise_ephemeris)

@spec from_precise_ephemeris_samples(Sidereon.GNSS.PreciseEphemeris.t()) ::
  {:ok, t()} | {:error, term()}

Build a cached interpolant from a sample-backed precise ephemeris source.

This reuses the already validated Sidereon.GNSS.PreciseEphemeris handle and copies its prepared interpolation nodes.

from_samples(samples)

@spec from_samples([Sidereon.GNSS.PreciseEphemerisSample.t()]) ::
  {:ok, t()} | {:error, term()}

Build a cached interpolant directly from precise ephemeris samples.

Samples are Sidereon.GNSS.PreciseEphemerisSample structs. They must use one time scale, be grouped into at least two strictly increasing epochs per satellite, and carry finite positions and clocks. Validation reasons match Sidereon.GNSS.PreciseEphemeris.from_samples/1.

from_sp3(sp3)

@spec from_sp3(Sidereon.GNSS.SP3.t()) :: {:ok, t()} | {:error, term()}

Build a cached interpolant from a parsed SP3 product.

The SP3 product is already parsed and held by the BEAM. This function copies its interpolation nodes into a second read-only handle. Returns {:ok, %Sidereon.GNSS.PreciseEphemeris.Interpolant{}}.

satellite_ids(interpolant)

@spec satellite_ids(t()) :: [String.t()]

Return the satellite ids available in the cached interpolant.

The ids are canonical SP3/RINEX tokens such as "G01" and are sorted in core satellite order.

states_at_j2000_s(source, satellites, epochs_j2000_s)

@spec states_at_j2000_s(source(), [String.t()], [number()]) ::
  {:ok, Sidereon.GNSS.PreciseEphemeris.StateBatch.t()} | {:error, term()}

Evaluate states for parallel satellite and epoch arrays.

satellites[i] is evaluated at epochs_j2000_s[i]. The lists must have the same length. The returned StateBatch is index-aligned with the inputs and preserves each scalar result in batch.results.

states_at_shared_j2000_s(source, satellites, epoch_j2000_s)

@spec states_at_shared_j2000_s(source(), [String.t()], number()) ::
  {:ok, Sidereon.GNSS.PreciseEphemeris.StateBatch.t()} | {:error, term()}

Evaluate states for many satellites at one shared J2000-second epoch.

The returned StateBatch is index-aligned with satellites. Missing data is represented per element rather than failing the whole call.

time_scale(interpolant)

@spec time_scale(t()) :: String.t()

Return the source time-scale abbreviation, such as "GPST".