astrodynamics-gnss
GNSS domain layer built on the astrodynamics
core crate. A sibling crate, not a feature — a propagation-only consumer never
has to compile the SP3/RINEX/IONEX parsers.
What it provides
- SP3 precise ephemeris — SP3-c/SP3-d parsing and arbitrary-epoch position/clock interpolation.
- Broadcast ephemeris — RINEX 3.x/4.xx navigation parsing and orbit/clock evaluation for GPS (LNAV), Galileo (I/NAV, F/NAV), BeiDou (D1/D2, including geostationary satellites), and GLONASS (PZ-90.11 state-vector propagation by Runge–Kutta integration).
- Atmospheric corrections — broadcast Klobuchar ionosphere (frequency-aware) and Saastamoinen + Niell troposphere.
- Single-point positioning — multi-constellation least-squares PVT with one receiver clock per system, elevation weighting, satellite rejection, and dilution of precision.
Parity bar
Every independently reproducible, libm-bound component (orbit and clock evaluation, ionosphere, troposphere, DOP) is held to bit-exact (0 ULP) parity against a pinned Python reference, proven by committed hex-float golden vectors; broadcast orbits are additionally validated against precise SP3 products. The least-squares solver's converged position is a sub-micron solver-agreement result, not a 0-ULP claim (the linear-algebra step is BLAS-bound).
Units are SI throughout, with the frame and datum encoded in the type
(ItrfPositionM, Wgs84Geodetic). 0 ULP is certified against a pinned target
(OS/arch, libm, toolchain, FMA policy); other platforms run the same algorithms
but need their own fixtures.
License
MIT