Sidereon.GNSS.PreciseEphemerisSample (Sidereon v0.25.0)

Copy Markdown View Source

One precise-ephemeris sample: a satellite's ECEF position (and optional clock) at one epoch, in SI units.

This is the canonical, serialization-independent intermediate representation of a precise orbit/clock product. SP3 text is one serialization of it; Sidereon.GNSS.SP3.precise_ephemeris_samples/1 extracts the same samples from a parsed product, and Sidereon.GNSS.PreciseEphemeris.from_samples/1 rebuilds an interpolatable source from them, with no text in the loop.

Fields

  • :sat - the canonical SP3/RINEX satellite token, e.g. "G01".
  • :epoch - the sample epoch as a split Julian date tagged with its time scale: %{time_scale: "GPST", jd_whole: float, jd_fraction: float}. Every sample in one source must carry the same time scale.
  • :position_ecef_m - satellite position in the ITRF/IGS ECEF frame, in meters, as {x_m, y_m, z_m}.
  • :clock_s - satellite clock offset in seconds, or nil when no clock estimate exists.
  • :clock_event - mirrors the SP3 E clock-event flag. When true this epoch marks a clock discontinuity and the interpolator splits the clock arc here (it never interpolates a clock across a reset). Defaults to false.

Summary

Types

epoch()

@type epoch() :: %{time_scale: String.t(), jd_whole: float(), jd_fraction: float()}

t()

@type t() :: %Sidereon.GNSS.PreciseEphemerisSample{
  clock_event: boolean(),
  clock_s: float() | nil,
  epoch: epoch(),
  position_ecef_m: vec3(),
  sat: String.t()
}

vec3()

@type vec3() :: {float(), float(), float()}