4 releases

new 0.1.4 Sep 19, 2023
0.1.2 Sep 14, 2023
0.1.1 Sep 14, 2023
0.1.0 Sep 9, 2023

#141 in Geospatial

Download history 67/week @ 2023-09-09 38/week @ 2023-09-16

105 downloads per month
Used in 2 crates

MIT/Apache

1MB
24K SLoC

RINEX

Rust crates.io crates.io

minimum rustc: 1.64 License License

Rust tool suites to parse, analyze and process RINEX Data.

This RINEX toolsuite is part of the GeoRust community, and we aim towards advanced geodesic and ionospheric analysis.

Advantages 🚀

  • Fast
  • Open sources
  • Native Hatanaka decompression and compression
  • Seamless .gzip decompression with flate2 compilation feature
  • RINEX V4 full support, that includes modern Navigation messages
  • Meteo RINEX full support
  • IONEX and Clock RINEX partial support, will be concluded soon
  • File merging, splitting and pre processing
  • Modern constellations like BeiDou, Galileo and IRNSS
  • Supported time scales are GPST, BDT, GST, UTC
  • Full support of Military codes : if you're working with such signals you can at least run a -qc analysis, and possibly the position solver once it is merged
  • Supports high precision RINEX (scaled phase data with micro cycle precision)
  • RINEX post processing like SNR, DCB analysis, Broadcast ephemeris interpolation, high precision orbit interpolation (SP3)..
  • RINEX-qc: statistical analysis that you can request in the "cli" application directly. Analysis can run on modern GNSS signals and SP3 high precision data. Emulates "teqc" historical application.
  • An SPP/PPP position solver (under development), in the form of the "gnss-rtk" library that you can summon from the "cli" application directly.

Known weaknesses ⚠️

  • QZNSST is represented as GPST at the moment
  • GLONASST and IRNSST are not supported : calculations (mostly orbits) will not be accurate
  • Partial SBAS support : some features are not yet available
  • The command line tool does not accept BINEX or other proprietary formats
  • File production is not fully concluded to this day, some formats are still not correctly supported (mostly NAV).

Architecture

  • rinex is the core library

  • rinex-cli is a command line application based on the core library.
    It can be used to process RINEX files and perform operations similar to teqc.
    The application is auto-generated for a few architectures, download it from the release portal

  • sp3 High Precision Orbits (by IGS)

  • gnss-rtk a position solver from raw GNSS signals. Currently works from RINEX input data, but that is not exclusive.

  • rnx2crx is a RINEX compressor (RINEX to Compact RINEX)

  • crx2rnx is a CRINEX decompresor (Compact RINEX to RINEX)

  • rinex-qc is a library dedicated to RINEX files analysis

  • qc-traits declares Traits that are shared between rinex and rinex-qc

  • sinex SNX dedicated core library

  • ublox-rnx is an application intended to generate RINEX Data from raw uBlox GNSS receiver frames. This application is work in progress at the moment.

RINEX formats & applications

Type Parser Writer CLI UBX Content Record browsing
Navigation (NAV) ✔️ Ephemeris 🚧 V4 🚧 ✔️ 📈 🚧 Orbit parameters, Ionospheric models.. Epoch iteration
Observation (OBS) ✔️ ✔️ ✔️ 📈 🚧 Phase, Pseudo Range, Doppler, SSI Epoch iteration
CRINEX (Compressed OBS) ✔️ RNX2CRX1 ✔️ RNX2CRX3 🚧 ✔️ 📈 🚧 see OBS Data Epoch iteration
Meteorological data (MET) ✔️ ✔️ ✔️ 📈 🚧 Meteo sensors data (Temperature, Moisture..) Epoch iteration
Clocks (CLK) ✔️ 🚧 🚧 🚧 Clock comparison Epoch iteration
Antenna (ATX) ✔️ 🚧 🚧 🚧 Antenna calibration data Sorted by antex::Antenna
Ionosphere Maps (IONEX) ✔️ 🚧 ✔️ 📈 🚧 Ionosphere Electron density Epoch iteration
SINEX (SNX) 🚧 🚧 🚧 SINEX are special RINEX, they are managed by a dedicated core library Epoch iteration
Troposphere (TRO) 🚧 🚧 🚧 Troposphere modeling Epoch iteration
Bias (BIA) ✔️ 🚧 🚧 Bias estimates, like DCB.. Epoch iteration

✔️ means all revisions supported
🚧 : Work in Progress
CLI + 📈 means the cli app provides one or several visualizations

The cli app accepts more than RINEX input, for example SP3 (high precision orbits) are accepted.

File formats

Format File name restrictions Support
RINEX ✔️
CRINEX ✔️
gzip compressed RINEX Name must end with .gz --flate2 feature must be enabled
gzip compressed CRINEX Name must end with .gz --flate2 feature must be enabled
SP3 --flate2 feature must be enabled

➖ No restrictions: file names do not have to follow naming conventions.

Benchmarking

Test Results
textdiff/decompression/epoch 979.55 ns
textdiff/decompression/flag 147.16 ns
numdiff/decompression/small 191.86 ns
numdiff/decompression/big 1.0973 µs
parsing/OBSv2/zegv0010.21o 951.40 µs
parsing/OBSv3/ACOR00ESP 4.1139 ms
processing/esbc00dnkr2021/mask:gnss 352.81 ms
processing/esbc00dnkr2021/mask:obs 438.73 ms
processing/esbc00dnkr2021/mask:sv 341.42 ms
processing/esbc00dnkr2021/smooth:hatch:l1c,l2c 502.90 ms

Special Thanks

RINEX relies heavily on the great libraries written by C. Rabotin, check out his work.
Some features would not exist without the invaluable help of J. Lesouple, check out his PhD manuscript (french)

Contributions

Contributions are welcomed, do not hesitate to open new issues and submit Pull Requests through Github.

If you want to take part in active developments, check out our contribution guidelines and hints to navigate this library quicker.


lib.rs:

RINEX Quality analysis library

Dependencies

~15MB
~273K SLoC