Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 2 additions & 7 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,5 @@ target

*.swo
*.swp

ckmg-v1.txt
jplg-v1.txt
custom.txt
region.txt
test.txt
test.txt.gz
*.txt
*.txt.gz
50 changes: 36 additions & 14 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -22,28 +22,49 @@ all-features = true
rustdoc-args = ["--cfg", "docrs", "--generate-link-to-definition"]

[features]
default = ["flate2"] # gzip files supported by default
# serde by default
# gzip files supported by default
default = ["serde", "flate2"]

[build-dependencies]
serde_json = { version = "1.0", features = ["preserve_order"] }
serde = { version = "1.0", default-features = false, features = ["derive"] }
serde = [
"dep:serde",
"gnss-rs/serde",
"hifitime/serde",
]

qc = [
"dep:maud",
"dep:gnss-qc-traits",
]

[dependencies.gnss-rs]
git = "https://github.com/nav-solutions/gnss"
rev = "dc4d4c2d413a3be90a3fa08a6ab29079eec13923"
features = ["std", "domes", "cospar", "sbas"]

[dependencies.gnss-qc-traits]
git = "https://github.com/nav-solutions/qc-traits"
rev = "63200d41bab2efa7d10082ae43a113d360722342"
optional = true
features = ["html"]

[dependencies.hifitime]
version = "4.1"
features = ["std"]

[dependencies]
geo = "0.30"
geo = "0.31"
thiserror = "2"
itertools = "0.14.0"
num-integer = "0.1.44" # TODO: see if we can get rid of div_ceil

# activate parser logs
itertools = "0.14"
log = { version = "0.4", optional = true }

# support gzip files
flate2 = { version = "1", optional = true }

gnss-rs = { version = "2.4", features = ["serde"] }
hifitime = { version = "4.1", features = ["serde", "std"] }
maud = { version = "0.26", optional = true }
serde = { version = "1.0", optional = true, default-features = false, features = ["derive"] }

[build-dependencies]
serde_json = { version = "1.0", features = ["preserve_order"] }
serde = { version = "1.0", default-features = false, features = ["derive"] }

[dev-dependencies]
log = "0.4"
criterion = "0.7"
Expand All @@ -56,3 +77,4 @@ harness = false
[[bench]]
name = "formatting"
harness = false

27 changes: 24 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ quantization spec that is constant over entire fileset and is described in the h
## Advantages

- Fast and powerful parser
- Open source
- Open sources: read and access all the code
- Seamless Gzip decompression (on `flate2` feature)
- Full 2D support
- TEC Root Mean Square is supported
Expand All @@ -45,6 +45,27 @@ Contributions are welcomed:
- follow our [Discussions on Github.com](https://github.com/nav-solutions/discussions)
- join our [Discord channel](https://discord.gg/EqhEBXBmJh)

RINEX formats & applications
============================

| Type | Parser | Writer | Content | Record Indexing | Timescale |
|----------------------------|-------------------------------------------------------------------------|---------------------|-----------------------------------------------|----------------------------------------------------------------------------------| -----------|
| Navigation (NAV) | [Provided by the RINEX parser](https://github.com/nav-solutions/rinex) | :heavy_check_mark: | Ephemerides, Ionosphere models | [NavKey](https://docs.rs/rinex/latest/rinex/navigation/struct.NavKey.html) | SV System time broadcasting this message |
| Observation (OBS) | [Provided by the RINEX parser](https://github.com/nav-solutions/rinex) | :heavy_check_mark: | Phase, Pseudo Range, Doppler, SSI | [ObsKey](https://docs.rs/rinex/latest/rinex/observation/struct.ObsKey.html) | GNSS (any) |
| CRINEX (Compressed OBS) | [Provided by the RINEX parser](https://github.com/nav-solutions/rinex) | :heavy_check_mark: | Phase, Pseudo Range, Doppler, SSI | [ObsKey](https://docs.rs/rinex/latest/rinex/observation/struct.ObsKey.html) | GNSS (any) |
| Meteorological data (MET) | [Provided by the RINEX parser](https://github.com/nav-solutions/rinex) | :heavy_check_mark: | Meteo sensors data (Temperature, Moisture..) | [MeteoKey](https://docs.rs/rinex/latest/rinex/meteo/struct.MeteoKey.html) | UTC |
| Clocks (CLK) | [Provided by the RINEX parser](https://github.com/nav-solutions/rinex) | :construction: | Precise temporal states | [ClockKey](https://docs.rs/rinex/latest/rinex/clock/record/struct.ClockKey.html) | GNSS (any) |
| Antenna (ATX) | [Provided by the RINEX parser](https://github.com/nav-solutions/rinex) | :construction: | Precise RX/SV Antenna calibration | `antex::Antenna` | :heavy_minus_sign: |
| Ionosphere Maps (IONEX) | :heavy_check_mark: | :heavy_check_mark: | Ionosphere Electron density | [Record Key](https://docs.rs/ionex/latest/ionex/key/struct.Key.html) | UTC |
| DORIS RINEX | [Provided by the DORIS parser](https://github.com/nav-solutions/doris) | :heavy_check_mark: | Temperature, Moisture, Pseudo Range and Phase observations | [Record Key](https://docs.rs/doris-rs/latest/doris_rs/record/struct.Key.html) | TAI / "DORIS" timescale |

Contributions
=============

Contributions are welcomed, we still have a lot to accomplish, any help is always appreciated.
[We wrote these few lines](CONTRIBUTING.md) to help you understand the inner workings.
Join us on [Discord](https://discord.gg/EqhEBXBmJh) to discuss ongoing and future developments.

## Getting started

```rust
Expand Down Expand Up @@ -75,14 +96,14 @@ assert_eq!(ionex.header.base_radius_km, 6371.0);
assert!(ionex.is_2d());

// this file is named according to IGS standards
let descriptor = ionex.production.clone().unwrap();
let descriptor = ionex.attributes.clone().unwrap();

// to obtain TEC values at any coordinates, you
// should use the [MapCell] local region (rectangle quanta)
// that offers many functions based off the Geo crate.

// Convenient helper to follow standard conventions
let filename = ionex.standardized_filename();
let filename = ionex.generate_standardized_filename();

// Dump to file
let fd = File::create("custom.txt").unwrap();
Expand Down
Loading
Loading