Expand description
spacelab-gnss — multi-constellation GNSS broadcast orbits, observations, geometry metrics and RINEX parsing.
The Keplerian constellations (GPS/Galileo/BeiDou/QZSS/NavIC) broadcast a
Keplerian-plus-corrections model turned into an Earth-fixed state by the IS-GPS-200 algorithm
(gps); GLONASS instead broadcasts a PZ-90 Cartesian state integrated numerically (glonass).
rinex reads either out of a RINEX 3 navigation file, almanac reads the coarse,
long-validity GPS almanac in both distributed formats, and dop() turns a set of satellite
positions into the dilution-of-precision geometry metrics.
The measurement side starts at rinex_obs, which reads a RINEX 3 observation file:
combinations forms the dual-frequency linear combinations from those observables,
cycle_slip cuts a carrier-phase arc where its integer ambiguity jumped, and lambda solves
the integer least-squares problem that fixes the ambiguity itself.
This exceeds Orekit’s GNSSPropagator reach: all six constellations plus the DOP metrics GNSS
engineers actually use. The orbit math is no_std + libm; the text parser needs std.
Re-exports§
pub use combinations::CombinationError;pub use combinations::FrequencyPair;pub use combinations::carrier_frequency;pub use combinations::geometry_free;pub use combinations::graphic;pub use dop::Dop;pub use dop::dop;pub use glonass::GlonassEphemeris;pub use glonass::glonass_l1_frequency;pub use glonass::glonass_l2_frequency;pub use gps::BroadcastEphemeris;pub use gps::EARTH_GM;pub use gps::EARTH_ROTATION_RATE;pub use gps::GnssSystem;pub use gps::kepler_solve;pub use models::gmf_mapping;pub use models::ionospheric_mapping_factor;pub use models::klobuchar_iono_delay;pub use models::niell_mapping;pub use models::obliquity_mapping;pub use models::saastamoinen_zenith_hydrostatic;pub use models::saastamoinen_zenith_wet;pub use models::vmf1_mapping;pub use models::vmf3_mapping;pub use rtcm::ClockCorrection;pub use rtcm::DecodeError;pub use rtcm::Frame;pub use rtcm::Message;pub use rtcm::OrbitCorrection;pub use rtcm::RtcmDecoder;pub use rtcm::SsrClockBlock;pub use rtcm::SsrOrbitBlock;pub use rtcm::StationReferencePoint;pub use rtcm::apply_orbit;pub use rtcm::crc24q;pub use rtcm::decode;pub use gpt3::Gpt3Result;pub use gpt3::gpt3;pub use almanac::AlmanacEntry;pub use almanac::parse_sem;pub use almanac::parse_yuma;pub use almanac::resolve_week;pub use cycle_slip::DetectorError;pub use cycle_slip::GeometryFreeDetector;pub use cycle_slip::PolynomialFitDetector;pub use cycle_slip::SlipVerdict;pub use lambda::Candidate;pub use lambda::LambdaError;pub use lambda::Reduction;pub use ntrip::ConnectError;pub use ntrip::Credentials;pub use ntrip::NtripClient;pub use ntrip::NtripError;pub use ntrip::Response;pub use ntrip::Revision;pub use ntrip::SourceTable;pub use ntrip::SourceTableEntry;pub use sinex_bias::Bias;pub use sinex_bias::BiasKind;pub use sinex_bias::BiasSinex;pub use sinex_bias::BiasUnit;pub use sinex_bias::SinexEpoch;pub use rinex_obs::ObsCode;pub use rinex_obs::ObsEpoch;pub use rinex_obs::ObsHeader;pub use rinex_obs::ObsKind;pub use rinex_obs::Observation;pub use rinex_obs::RinexObs;pub use rinex_obs::RinexObsError;pub use rinex_obs::SatObservation;pub use sp3::Itrs;pub use sp3::ReferenceFrame;pub use sp3::SatId;pub use sp3::Sp3;pub use sp3::TimeSystem;pub use vmf_grid::VmfCoefficients;pub use vmf_grid::VmfGrid;pub use vmf_grid::VmfGridError;pub use vmf_grid::VmfModel;
Modules§
- almanac
- GPS almanac readers for the two formats the constellation is distributed in — SEM and Yuma — the
analogue of Orekit’s
SEMParserandYUMAParser. - combinations
- Dual-frequency linear combinations of GNSS observables, and the carrier frequencies they need.
- cycle_
slip - Cycle-slip detection on a single satellite arc.
- dop
- Dilution of precision — how a set of visible-satellite directions amplifies range error into
position/time error. This is the metric GNSS engineers use to score constellation geometry, and it
composes directly with the broadcast orbits in this crate (propagate → positions →
dop). - glonass
- GLONASS broadcast ephemeris → PZ-90 position/velocity by numerical integration (GLONASS ICD 5.1, Appendix A.3.1.2).
- gps
- GPS broadcast ephemeris → ECEF position/velocity, per IS-GPS-200 (Table 20-IV / 30-II) with the analytic velocity of Remondi (2004).
- gpt3
- GPT3 (Global Pressure and Temperature 3) — the empirical/blind troposphere model that is the
offline companion to
VMF3. From(latitude, longitude, day-of-year, height)it returns theVMF3mappinga-coefficientsa_h/a_wplus surface pressure, temperature, water-vapour pressure, weighted mean temperatureTm, the water-vapour decrease factorlambda, and the four azimuthal tropospheric gradient coefficients. It letscrate::vmf3_mappingrun with no external grid files: a 5°×5° climatology of seasonal Fourier coefficients is embedded in the binary. - higher_
order_ iono - Second-order ionospheric delay — the higher-order term Orekit’s ionosphere models omit.
- lambda
- LAMBDA — integer least-squares estimation of carrier-phase ambiguities.
- models
- Single-frequency propagation-delay models — the ionospheric and tropospheric corrections a receiver applies to a pseudorange, completing the GNSS error budget alongside the orbits.
- ntrip
- NTRIP — the HTTP-shaped protocol that carries
crate::rtcmframes from a caster to a rover. - rinex
- A minimal RINEX 3 navigation-message parser for GPS records — the analogue of Orekit’s
RinexNavigationParseron its GPS path. - rinex4
- RINEX 4.02 navigation files — every record type the format defines, read from its own columns.
- rinex_
obs - A RINEX 3 observation reader — the measurement file
crate::rinexhas no counterpart for. - rtcm
- RTCM 3 transport and the messages a real-time GNSS client actually needs: station coordinates, broadcast ephemerides, and the SSR orbit and clock corrections that turn a broadcast orbit into a precise one.
- sinex_
bias - Bias-SINEX: the differential and observable-specific code biases that turn a pseudorange into a range, and the last ingredient a precise-point-positioning client needs that this crate did not carry.
- sp3
- SP3 precise-ephemeris ingestion and polynomial interpolation.
- vmf_
grid - Operational VMF grid reader — the 6-hourly gridded
a_h/a_w(plus zenith delays) the TU Wien VMF Data Server derives from ECMWF numerical weather, and the data source that feedscrate::vmf1_mapping/crate::vmf3_mapping. Parse one epoch’s grid, interpolate to a site, hand the coefficients to the mapping function; blend two consecutive epochs in time withVmfCoefficients::lerp.