Command line tool to parse, analyze and manage RINEX files.
The main purpose of this tool is to expose the library capabilities, in a high level and easy to use interface.
Several RINEX files exist, this tool supports already quite a few.
Refer to the
main table
to understand what is doable.
File names are disregarded by this tool, you can parse & analyze files that do not follow naming conventions.
CRINEX (V1 and V3) are natively supported.
This tool supports gzip compressed files but the file name must be terminated by .gz
.
Reports and plots are rendered in HTML in the rinex/rinex-cli/product
directory.
Analysis is named after the primary RINEX file.
teqc
operationsteqc
is a well known application to process RINEX files.
Unlike teqc, this application is not capable of processing Binary RINEX ("BINEX") and
proprietary formats in general.
Some teqc operations are supported:
Download the latest release for your architecture from the release portal.
Or compile the application manually:
shell
cargo build --all-features --release
The program is located in "target/release/rinex-cli",
which we might simply refer in some examples as rinex-cli
.
All examples depicted in this documentation suite uses our
test data.
That means you have everything to reproduce the provided examples on your side.
Refer to the help menu which provides extensive explanations:
bash
./target/release/rinex-cli -h
File paths always have to be absolute.
Arguments order does not matter to this application:
bash
rinex-cli --fp test_resources/CRNX/V3/ESBC00DNK_R_20201770000_01D_30S_MO.crx.gz
rinex-cli --sv-epoch --fp test_resources/CRNX/V3/ESBC00DNK_R_20201770000_01D_30S_MO.crx.gz
Use the RUST_LOG
environment variable to setup the logger.
Set the sensitivy as desired, "trace" being the most sensitive,
"info" the standard value:
```bash RUSTLOG=trace rinex-cli --fp testresources/NAV/V2/amel010.21g
export RUSTLOG=info rinex-cli --fp testresources/NAV/V2/amel010.21g ```
Here's an example of traces you might get on a complex run:
bash
./target/release/rinex-cli \
-f test_resources/CRNX/V3/ESBC00DNK_R_20201770000_01D_30S_MO.crx.gz \
-P GPS L1C,L2L ">G18" "<=G25" \
decim:4:L1C ">2020-06-25T08:00:00 UTC" "<=2020-06-25T10:00:00 UTC"
2023-06-10T10:37:30.951Z INFO rinex_cli::context > antenna position: WGS84 (3582105.291m 532589.7313m 5232754.8054m)
2023-06-10T10:37:30.988Z TRACE rinex_cli::preprocessing > applied filter "GPS"
2023-06-10T10:37:31.007Z TRACE rinex_cli::preprocessing > applied filter "L1C,L2L"
2023-06-10T10:37:31.013Z TRACE rinex_cli::preprocessing > applied filter ">G18"
2023-06-10T10:37:31.015Z TRACE rinex_cli::preprocessing > applied filter "<=G25"
2023-06-10T10:37:31.055Z TRACE rinex_cli::preprocessing > applied filter "decim:4:L1C"
2023-06-10T10:37:31.056Z TRACE rinex_cli::preprocessing > applied filter ">2020-06-25T08:00:00 UTC"
2023-06-10T10:37:31.057Z TRACE rinex_cli::preprocessing > applied filter "<=2020-06-25T10:00:00 UTC"
2023-06-10T10:37:31.057Z INFO rinex_cli > record analysis
2023-06-10T10:37:31.057Z TRACE rinex_cli::plot::record::observation > Carrier cycles observations
2023-06-10T10:37:31.058Z INFO rinex_cli > graphs rendered in "product/ESBC00DNK_R_20201770000_01D_30S_MO/graphs.html"
antenna position: WGS (x, y, z)
was located in the provided context: some advanced operations are feasible.
A few preprocessing operations were requested with -P
, you get a trace
for every operation that did apply (correct command line description).
> record analysis
means the analysis is starting at this point.
The location of the graphs that were rendered (if any) is given.
rinex-cli/product is where all analysis reports
get generated. It is named after the main RINEX file (-fp
) which
allows preserving sessions for different files.
Analysis are stacked to one another, and order does not matter.
For example, when providing OBS RINEX data, one plot per physic is to be generated. In this example, we also stack two more analysis, both of them are graphical, so two more graphs are rendered.
bash
rinex-cli \
--sv-epoch \ # Sv per Epoch identification
--epoch-hist \ # sampling rate histogram analysis
--fp test_resources/CRNX/V3/ESBC00DNK_R_20201770000_01D_30S_MO.crx.gz
The analysis report is generated in HTML.
In the future, we will allow other formats to be generated
(like JSON).
When the analysis is concluded, the report
is opened in the default web browser. This is turned off
if the quiet option (-q
) is active.
The HTML content is self-sufficient, all Javascript
and other dependencies are integrated .
This results in a large file whose rendering is quick.
To change that behavior, the --tiny-html
option is there.
The resulting report gets reduced (about 8 times smaller), but
graphical views (if any) are longer to render in the browser.
This is actually only true if the javascript has not been cached
by the web browser.
Basic Identification consists in extracting high level information to understand which
data is contained in a given RINEX.
Examples of such information would be Epoch
or Sv
enumerations.
For example:
bash
rinex-cli -f OBS/V2/KOSG0010.95O --epochs
rinex-cli -f test_resources/OBS/V2/KOSG0010.95O --epochs --sv
The --pretty
option is there to make the datasets more readable (json format):
bash
rinex-cli -f test_resources/OBS/V2/KOSG0010.95O --epochs --sv --pretty
Several analysis can be stacked to the generated report,
like --sv-epoch
or sample rate analysis with --epoch-hist
.
Refer to their dedicated page documentation.
Like input files, output files do not have to follow RINEX naming conventions.
Eventually, this tool might have a file creation helper, to help the user
follow naming conventions, but it is currenly under development.
File generation applies to all the following operations
For example, create a file that is only made of G08 data originally contained in this file:
bash
rinex-cli -f test_resources/CRNX/V3/ESBC00DNK_R_20201770000_01D_30S_MO.crx.gz \
-P G08 \ # see preprocessing toolkit
--output g01.txt # does not have to follow naming conventions
Header section is simply copied and maintained.
It is possible compress data to .gz directly, if the specified --output
is terminated by .gz
.
It is also possible to convert Observation Data to CRINEX directly
* to CRINX1 if the specified --output
is terminated by a standard YYd termination
* to CRINX3 if the specified --output
is termined by .crx
In cases where CRINEX conversion is feasible,
it is possible to stack the .gz
compression on top of it
* YYd.gz to specify a CRNX1 + gz
* crx.gz to specify a CRNX3 + gz
Likewise, the mirror operations are feasible:
.gz
compressed data and dump it as readableA header section customization interface is currently under development.
It is possible to pass custom header fields, one per --output
flag,
to customize such section of the RINEX to be generated.
The custom-header
flag accepts either a direct JSON description
of the Rinex::Header
structure, or a local file containing
such a description.