Orbis.GNSS.Positioning.Solution (Orbis v0.9.1)

Copy Markdown View Source

A single-point-positioning solution at one receive epoch.

position is the converged ITRF/IGS ECEF position in meters. geodetic is the same point as %{lat_rad, lon_rad, height_m} when geodetic output was requested (the default), otherwise nil. rx_clock_s is the reference-system receiver clock bias in seconds; system_clocks_s is a map of GNSS letter (e.g. "G", "E") to that system's absolute receiver clock in seconds (a single entry for a one-system solve, one per constellation for a mixed solve). These are per-system clocks, not biases: the inter-system bias of a system is its clock minus the reference system's (rx_clock_s). dop carries the dilution-of-precision scalars for any full-rank geometry — a single-system solve uses the bit-exact four-state cofactor, a multi-system solve a general inverse with one clock column per constellation — and is nil only when the geometry is rank-deficient. residuals_m are the post-fit pseudorange residuals in meters, in used_sats order. used_sats are the contributing satellite id strings (e.g. "G01"); rejected_sats pairs each excluded satellite id with its reason atom (:no_ephemeris or :low_elevation). metadata reports solver iterations, convergence, and which corrections were applied.

Summary

Types

dop()

@type dop() :: %{
  gdop: float(),
  pdop: float(),
  hdop: float(),
  vdop: float(),
  tdop: float()
}

geodetic()

@type geodetic() :: %{lat_rad: float(), lon_rad: float(), height_m: float()}

metadata()

@type metadata() :: %{
  iterations: non_neg_integer(),
  converged: boolean(),
  status: atom(),
  ionosphere_applied: boolean(),
  troposphere_applied: boolean()
}

position()

@type position() :: %{x_m: float(), y_m: float(), z_m: float()}

t()

@type t() :: %Orbis.GNSS.Positioning.Solution{
  dop: dop() | nil,
  geodetic: geodetic() | nil,
  metadata: metadata(),
  position: position(),
  rejected_sats: [{String.t(), :no_ephemeris | :low_elevation}],
  residuals_m: [float()],
  rx_clock_s: float(),
  system_clocks_s: %{required(String.t()) => float()},
  used_sats: [String.t()]
}