/rinex

:artificial_satellite: :rocket: RINEX data in Rust: compression, analysis, processing

Primary LanguageRustApache License 2.0Apache-2.0

RINEX

Rust crates.io crates.io

minimum rustc: 1.61 License License

Rust tool suites to parse, analyze and process RINEX files

  • 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 or perform operations similar to teqc.
    The application is auto-generated for a few architectures, download it from the release portal

  • rnx2crx is a RINEX compression program

  • crx2rnx is a CRINEX decompression program (Compact RINEX to RINEX)

  • sinex SNX dedicated core library

  • ublox-rnx is an application that connects to a Ublox receiver and generates RINEX data quickly & easily.
    It is the combination of the ublox and rinex crates.

By default, all timestamps are in UTC with leap seconds correctly managed.

Supported RINEX types

Type Parser Writer CLI UBX Notes
Navigation (NAV) โœ”๏ธ Ephemeris ๐Ÿšง V4 ๐Ÿšง โœ”๏ธ ๐Ÿ“ˆ ๐Ÿšง Epoch iteration
Observation (OBS) โœ”๏ธ โœ”๏ธ โœ”๏ธ ๐Ÿ“ˆ ๐Ÿšง Epoch iteration
CRINEX (Compressed OBS) โœ”๏ธ RNX2CRX1 โœ”๏ธ RNX2CRX3 ๐Ÿšง โœ”๏ธ ๐Ÿ“ˆ ๐Ÿšง Epoch iteration
Meteorological data (MET) โœ”๏ธ โœ”๏ธ โœ”๏ธ ๐Ÿ“ˆ ๐Ÿšง Epoch iteration
Clocks (CLK) โœ”๏ธ ๐Ÿšง ๐Ÿšง ๐Ÿšง Epoch iteration
Antenna (ATX) โœ”๏ธ ๐Ÿšง ๐Ÿšง ๐Ÿšง Sorted by antex::Antenna
Ionosphere Maps (IONEX) โœ”๏ธ ๐Ÿšง โœ”๏ธ ๐Ÿ“ˆ ๐Ÿšง Epoch iteration
SINEX (SNX) ๐Ÿšง ๐Ÿšง โž– ๐Ÿšง SINEX are special RINEX, they are managed by a dedicated core library
Troposphere (TRO) ๐Ÿšง ๐Ÿšง โ“ ๐Ÿšง Troposphere are one possible SINEX declination
Bias (BIA) โœ”๏ธ ๐Ÿšง โ“ ๐Ÿšง Bias solutions are one possible SINEX declination

โœ”๏ธ means all revisions supported
๐Ÿšง under development
CLI + ๐Ÿ“ˆ means record analysis is supported by the CLI, README

File formats

Format File name restrictions Support
RINEX โž– โœ”๏ธ but refer to first table
CRINEX โž– โœ”๏ธ
RINEX + gzip Must end with .gz Compile with --flate2 feature, or uncompress manually first
CRINEX + gzip Must end with .gz Compile with --flate2 feature, or uncompress manually first
.Z โž– โŒ

โž– No restrictions: file names do not have to follow naming conventions.

Known weaknesses โš ๏ธ

  • Glonass Time Scale is not known to this day. We cannot parse and apply system time corrections from other time scales into the glonass time scale.

Record

High level operations can be performed on RINEX records and RINEX structure in general. Refer to the official Documentation.

RINEX Records vary a lot from one revision to another and from one file type to another. To learn how to browse the RINEX record you are interested in, refer to its definition in the official documentation. For example, here is the Observation Record definition.

Features

  • --serde enables main RINEX structures serialization and deserialization

  • --sbas: SBAS (stationnary augmentation systems related features).
    selection_helper(), select a SBAS for a given location on Earth.

  • --flate2
    allow native parsing of .gz compressed RINEX files. Otherwise, user must uncompress manually the .gz extension first.

Benchmark

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

Contributions

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

If you want to take part in active developments, checkout our TODO list