Skip to main content

Crate spacelab_gnss

Crate spacelab_gnss 

Source
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 rinex::parse_glonass_nav;
pub use rinex::parse_gps_nav;
pub use rinex::parse_nav;
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 SEMParser and YUMAParser.
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 the VMF3 mapping a-coefficients a_h/a_w plus surface pressure, temperature, water-vapour pressure, weighted mean temperature Tm, the water-vapour decrease factor lambda, and the four azimuthal tropospheric gradient coefficients. It lets crate::vmf3_mapping run 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::rtcm frames from a caster to a rover.
rinex
A minimal RINEX 3 navigation-message parser for GPS records — the analogue of Orekit’s RinexNavigationParser on 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::rinex has 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 feeds crate::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 with VmfCoefficients::lerp.