@@ -8,97 +8,51 @@ Don't forget to run a quick `cargo fmt` prior any submissions, so the CI/CD does
8
8
on coding style "issues".
9
9
10
10
This crate and ecosystem is part of the [ RTK-rs framework and community] ( https://github.com/rtk-rs ) .
11
- Contact us on [ Discord] ( https://discord.gg/duETmeGc ) .
11
+ You can contact us on [ Discord] ( https://discord.com/invite/VwuKPcw6 )
12
12
13
13
Crate architecture
14
14
==================
15
15
16
- For each supported RINEX types, we have one folder named after that format.
17
- ` src/navigation ` is one of those.
16
+ The RINEX library is architectured per RINEX formats. We support
18
17
19
- The module contains the record type definition. RINEX file contents vary a lot
20
- depending on which type of RINEX we're talking about.
21
- For complex RINEX formats like Navigation Data, that module will contain all possible inner types.
18
+ - Observation RINEX
19
+ - Navigation RINEX
20
+ - IONEX
21
+ - Clock RINEX
22
+ - ANTEX
23
+ - DORIS
24
+ - and Meteo RINEX
22
25
23
- Other important structures :
24
- - SV and Constellation support is provided by the GNSS lib (gnss-rs)
25
- - ` src/epoch/mod.rs ` : the Epoch module basically provides
26
- hifitime::Epoch parsing methods, because RINEX describes date in non standard formats.
27
- Also, the ` Flag ` structure is used to mark Observations (valid or invalid).
28
- - ` src/observable.rs ` : defines possible observations like raw phase
29
- - ` src/carrier.rs ` : defines carrier signals in terms of frequency and bandwidth.
30
- It also contains utilities to identify which GNSS signals we're dealing with,
31
- from an ` Observable ` .
32
- - ` src/hatanaka/mod.rs ` : the Hatanaka module contains the RINEX Compressor and Decompressor
33
- - ` src/antex/antenna.rs ` : defines the index structure of ANTEX format
26
+ For each supported RINEX types, you will find the related to section in a dedicated folder,
27
+ for example ` src/navigation ` for Navigation RINEX.
34
28
35
- Navigation Data
36
- ===============
29
+ For each record type, we define two custom types, ` K ` and ` V ` to describe the file content and be
30
+ indexed in a Map (either Hash or BTree). This principle has proved sufficient and very powerful.
31
+ The crate is undergoing a simplification phase where the record types are being simplified.
32
+ In otherwords, a simple ` Map<K, V> ` is then enough to represent the file content: that was not the case
33
+ in previous versions. This is true for most types but not all of them as of today!
37
34
38
- Orbit broadcasted parameters are presented in different form depending on the RINEX revisions
39
- and also may differ in their nature depending on which constellation we're talking about.
35
+ For that reason, this parser requires the ` std ` lib and we don't have plans to remove that dependency.
40
36
41
- To solve that problem, we use a dictionary, in the form of ` src/db/NAV/orbits.json ` ,
42
- which describes all fields per RINEX revision and GNSS constellation.
37
+ ## Key external structures
43
38
44
- This file is processed at build time, by the build script and ends up as a static
45
- pool we rely on when parsing a file.
39
+ ` SV ` and ` Constellation ` support is provided by our general purposes GNSS library.
40
+ ` Epoch ` , ` Duration ` and ` Timescales ` are defined within ` Hifitime ` .
46
41
47
- The dictionary is powerful enough to describe all revision, the default Navigation Message
48
- is ` LNAV ` : Legacy NAV message, which can be omitted. Therefore, it is only declared
49
- for modern Navigation messages.
42
+ ## Key internal structures and elements
50
43
51
- Introducing a new RINEX type
52
- ============================
44
+ - ` src/observable ` desfines RINEX Observable, as used in many RINEX formats.
45
+ - ` src/carrier ` defines carrier signals
53
46
54
- ` src/meteo/mod.rs ` is the easiest format and can serve as a guideline to follow.
47
+ ## Notes on CRINEX (RINEX compression)
55
48
56
- When introducing a new Navigation Data, the dictionary will most likely have to be updated (see previous paragraph).
49
+ Support for the CRINEX algorithm and compression technique
50
+ is provided in the ` src/hatanaka ` module, named after Y. Hatanaka who invented this compression algorithm, dedicated to Observation RINEX.
57
51
58
- GNSS Constellations
59
- ===================
52
+ We have a very complete & powerful infrastructure that support the algorithm both ways and have demonstrated
53
+ bit by bit reciprocity. The algorithm is tested in many ways in our CI and benchmarked on github.com.
54
+ This makes our library the most complete when it comes to supporting this compression technique as of today.
60
55
61
- Supported constellations are defined in the Constellation Module.
62
- This structure defines both Orbiting and Stationary vehicles.
56
+ ## Build Script
63
57
64
- Adding new SBAS vehicles
65
- ========================
66
-
67
- To add a newly launched SBAS vehicles, simply add it to the
68
- gnss-rs/data/sbas.json database.
69
-
70
- This database is auto integrated to this library to provide
71
- detailed SBAS supports. The only mandatory fields (in the databse) are:
72
- - the "constellation" field
73
- - the SBAS "prn" field (which is 100 + prn number)
74
- - "id": the name of that vehicle, for example "ASTRA-5B"
75
- - "launched\_ year": the year this vehicle was launched
76
-
77
- Other optional fields are:
78
- - "launched\_ month": month ths vehicle was launched
79
- - "launched\_ day": day of month this vehicle was launched
80
-
81
- We don't support undeployed vehicles (in advance).
82
-
83
- Modify or add Navigation Frames
84
- ===============================
85
-
86
- Navigation frames are desc
87
-
88
- The build script is rinex/build.rs.
89
-
90
- It is responsible for building several important but hidden structures.
91
-
92
- 1 . Navigation RINEX specs, described by rinex/db/NAV
93
- 2 . Geostationary vehicles identification in rinex/db/sbas/sbas.json,
94
- that follows the L1-CA-PRN Code assignment specifications (see online specs).
95
- 3 . rinex/db/SBAS/* .wkt contains geographic definitions for most
96
- standard SBAS systems. We parse them as Geo::LineStrings to
97
- define a contour area for a given SBAS system. This gives one method
98
- to select a SBAS from given location on Earth
99
-
100
- External key dependencies
101
- =========================
102
-
103
- - ` Hifitime ` for timing and timescales
104
- - ` ANISE ` for navigation
58
+ The crate comes with a build script that defines the Navigation messages to be supported (written as dictionary).
0 commit comments