1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.gnss.navigation;
18
19 import java.io.IOException;
20 import java.net.URISyntaxException;
21
22 import org.hipparchus.util.FastMath;
23 import org.junit.Assert;
24 import org.junit.Before;
25 import org.junit.Test;
26 import org.orekit.Utils;
27 import org.orekit.data.DataSource;
28 import org.orekit.errors.OrekitException;
29 import org.orekit.errors.OrekitMessages;
30 import org.orekit.gnss.SatelliteSystem;
31 import org.orekit.propagation.analytical.gnss.data.BeidouNavigationMessage;
32 import org.orekit.propagation.analytical.gnss.data.GLONASSNavigationMessage;
33 import org.orekit.propagation.analytical.gnss.data.GPSNavigationMessage;
34 import org.orekit.propagation.analytical.gnss.data.GalileoNavigationMessage;
35 import org.orekit.propagation.analytical.gnss.data.IRNSSNavigationMessage;
36 import org.orekit.propagation.analytical.gnss.data.QZSSNavigationMessage;
37 import org.orekit.propagation.analytical.gnss.data.SBASNavigationMessage;
38 import org.orekit.time.AbsoluteDate;
39 import org.orekit.time.TimeScalesFactory;
40
41 public class NavigationFileParserTest {
42
43 @Before
44 public void setUp() {
45 Utils.setDataRoot("regular-data");
46 }
47
48 @Test
49 public void testGpsRinex301() throws URISyntaxException, IOException {
50
51
52 final String ex = "/gnss/navigation/Example_GPS_Rinex301.n";
53 final RinexNavigation file = new RinexNavigationParser().
54 parse(new DataSource(ex, () -> getClass().getResourceAsStream(ex)));
55
56
57 Assert.assertEquals(3.01, file.getFormatVersion(), Double.MIN_VALUE);
58 Assert.assertEquals("N", file.getFileType());
59 Assert.assertEquals(SatelliteSystem.GPS, file.getSatelliteSystem());
60 Assert.assertEquals("XXRINEXN V3", file.getProgramName());
61 Assert.assertEquals("AIUB", file.getAgencyName());
62 Assert.assertEquals("19990903", file.getCreationDateString());
63 Assert.assertEquals("152236", file.getCreationTimeString());
64 Assert.assertEquals("UTC", file.getCreationTimeZoneString());
65 Assert.assertEquals(0.0, file.getCreationDate().durationFrom(new AbsoluteDate(1999, 9, 3, 15, 22, 36.0, TimeScalesFactory.getUTC())), 0.0);
66 Assert.assertEquals("GPS", file.getIonosphericCorrectionType());
67 Assert.assertEquals(0.1676e-07, file.getKlobucharAlpha()[0], Double.MIN_VALUE);
68 Assert.assertEquals(0.2235e-07, file.getKlobucharAlpha()[1], Double.MIN_VALUE);
69 Assert.assertEquals(0.1192e-06, file.getKlobucharAlpha()[2], Double.MIN_VALUE);
70 Assert.assertEquals(0.1192e-06, file.getKlobucharAlpha()[3], Double.MIN_VALUE);
71 Assert.assertEquals(0.1208e+06, file.getKlobucharBeta()[0], Double.MIN_VALUE);
72 Assert.assertEquals(0.1310e+06, file.getKlobucharBeta()[1], Double.MIN_VALUE);
73 Assert.assertEquals(-0.1310e+06, file.getKlobucharBeta()[2], Double.MIN_VALUE);
74 Assert.assertEquals(-0.1966e+06, file.getKlobucharBeta()[3], Double.MIN_VALUE);
75 Assert.assertEquals("GPUT", file.getTimeSystemCorrections().get(0).getTimeSystemCorrectionType());
76 Assert.assertEquals(0.1331791282e-06, file.getTimeSystemCorrections().get(0).getTimeSystemCorrectionA0(), Double.MIN_VALUE);
77 Assert.assertEquals(0.107469589e-12, file.getTimeSystemCorrections().get(0).getTimeSystemCorrectionA1(), Double.MIN_VALUE);
78 Assert.assertEquals(552960, file.getTimeSystemCorrections().get(0).getTimeSystemCorrectionSecOfWeek());
79 Assert.assertEquals(1025, file.getTimeSystemCorrections().get(0).getTimeSystemCorrectionWeekNumber());
80 Assert.assertEquals("EXAMPLE OF VERSION 3.00 FORMAT", file.getComments());
81 Assert.assertEquals(13, file.getNumberOfLeapSeconds());
82
83
84 Assert.assertEquals(0, file.getGalileoNavigationMessages().size());
85 Assert.assertEquals(0, file.getQZSSNavigationMessages().size());
86 Assert.assertEquals(0, file.getBeidouNavigationMessages().size());
87 Assert.assertEquals(0, file.getIRNSSNavigationMessages().size());
88 Assert.assertEquals(0, file.getGlonassNavigationMessages().size());
89 Assert.assertEquals(0, file.getSBASNavigationMessages().size());
90 Assert.assertEquals(2, file.getGPSNavigationMessages().size());
91
92 final GPSNavigationMessage gps = file.getGPSNavigationMessages("G13").get(0);
93 Assert.assertEquals(0.0, gps.getEpochToc().durationFrom(new AbsoluteDate(1999, 9, 2, 19, 0, 0, TimeScalesFactory.getGPS())), Double.MIN_VALUE);
94 Assert.assertEquals(0.490025617182e-03, gps.getAf0(), 1.0e-15);
95 Assert.assertEquals(0.204636307899e-11, gps.getAf1(), 1.0e-15);
96 Assert.assertEquals(0.000000000000e+00, gps.getAf2(), 1.0e-15);
97 Assert.assertEquals(133, gps.getIODE());
98 Assert.assertEquals(-0.963125000000e+02, gps.getCrs(), 1.0e-15);
99 Assert.assertEquals(0.292961152146e+01, gps.getM0(), 1.0e-15);
100 Assert.assertEquals(-0.498816370964e-05, gps.getCuc(), 1.0e-15);
101 Assert.assertEquals(0.200239347760e-02, gps.getE(), 1.0e-15);
102 Assert.assertEquals(0.928156077862e-05, gps.getCus(), 1.0e-15);
103 Assert.assertEquals(0.515328476143e+04, FastMath.sqrt(gps.getSma()), 1.0e-15);
104 Assert.assertEquals(0.414000000000e+06, gps.getTime(), 1.0e-15);
105 Assert.assertEquals(-0.279396772385e-07, gps.getCic(), 1.0e-15);
106 Assert.assertEquals(0.243031939942e+01, gps.getOmega0(), 1.0e-15);
107 Assert.assertEquals(-0.558793544769e-07, gps.getCis(), 1.0e-15);
108 Assert.assertEquals(0.110192796930e+01, gps.getI0(), 1.0e-15);
109 Assert.assertEquals(0.271187500000e+03, gps.getCrc(), 1.0e-15);
110 Assert.assertEquals(-0.232757915425e+01, gps.getPa(), 1.0e-15);
111 Assert.assertEquals(-0.619632953057e-08, gps.getOmegaDot(), 1.0e-15);
112 Assert.assertEquals(-0.785747015231e-11, gps.getIDot(), 1.0e-15);
113 Assert.assertEquals(1025, gps.getWeek());
114 Assert.assertEquals(0.000000000000e+00, gps.getSvAccuracy(), 1.0e-15);
115 Assert.assertEquals(0.000000000000e+00, gps.getSvHealth(), 1.0e-15);
116 Assert.assertEquals(0.000000000000e+00, gps.getTGD(), 1.0e-15);
117 Assert.assertEquals(389, gps.getIODC());
118
119 }
120
121 @Test
122 public void testSBASRinex301() throws URISyntaxException, IOException {
123
124
125 final String ex = "/gnss/navigation/Example_SBAS_Rinex301.n";
126 final RinexNavigation file = new RinexNavigationParser().
127 parse(new DataSource(ex, () -> getClass().getResourceAsStream(ex)));
128
129
130 Assert.assertEquals(3.01, file.getFormatVersion(), Double.MIN_VALUE);
131 Assert.assertEquals("N", file.getFileType());
132 Assert.assertEquals(SatelliteSystem.SBAS, file.getSatelliteSystem());
133 Assert.assertEquals("sbf2rin-9.3.3", file.getProgramName());
134 Assert.assertEquals("", file.getAgencyName());
135 Assert.assertEquals("20150106", file.getCreationDateString());
136 Assert.assertEquals("000809", file.getCreationTimeString());
137 Assert.assertEquals("LCL", file.getCreationTimeZoneString());
138
139
140 Assert.assertEquals(0, file.getGalileoNavigationMessages().size());
141 Assert.assertEquals(0, file.getQZSSNavigationMessages().size());
142 Assert.assertEquals(0, file.getBeidouNavigationMessages().size());
143 Assert.assertEquals(0, file.getIRNSSNavigationMessages().size());
144 Assert.assertEquals(0, file.getGlonassNavigationMessages().size());
145 Assert.assertEquals(2, file.getSBASNavigationMessages().size());
146 Assert.assertEquals(0, file.getGPSNavigationMessages().size());
147
148 final SBASNavigationMessage sbas = file.getSBASNavigationMessages("S27").get(0);
149 Assert.assertEquals(0.0, sbas.getEpochToc().durationFrom(new AbsoluteDate(2015, 1, 4, 23, 58, 56.0, TimeScalesFactory.getGPS())), Double.MIN_VALUE);
150 Assert.assertEquals(2.980232238770E-08, sbas.getAGf0(), 1.0e-10);
151 Assert.assertEquals(1.182343112305E-11, sbas.getAGf1(), 1.0e-10);
152 Assert.assertEquals(8.631300000000E+04, sbas.getTime(), 1.0e-10);
153 Assert.assertEquals(2420.415392000E+04, sbas.getX(), 1.0e-10);
154 Assert.assertEquals(-3450.000000000E-04, sbas.getXDot(), 1.0e-10);
155 Assert.assertEquals(-3375.000000000E-07, sbas.getXDotDot(), 1.0e-10);
156 Assert.assertEquals(3.100000000000E+01, sbas.getHealth(), 1.0e-10);
157 Assert.assertEquals(3453.707432000E+04, sbas.getY(), 1.0e-10);
158 Assert.assertEquals(-2950.625000000E-03, sbas.getYDot(), 1.0e-10);
159 Assert.assertEquals(1750.000000000E-07, sbas.getYDotDot(), 1.0e-10);
160 Assert.assertEquals(4.096000000000E+03, sbas.getURA(), 1.0e-10);
161 Assert.assertEquals(-3269.960000000E+01, sbas.getZ(), 1.0e-10);
162 Assert.assertEquals(-2132.000000000E-03, sbas.getZDot(), 1.0e-10);
163 Assert.assertEquals(1875.000000000E-07, sbas.getZDotDot(), 1.0e-10);
164 Assert.assertEquals(192, sbas.getIODN(), 1.0e-10);
165
166 }
167
168 @Test
169 public void testBeidouRinex302() throws URISyntaxException, IOException {
170
171 final String ex = "/gnss/navigation/Example_Beidou_Rinex302.n";
172 final RinexNavigation file = new RinexNavigationParser().
173 parse(new DataSource(ex, () -> getClass().getResourceAsStream(ex)));
174
175
176 Assert.assertEquals(3.02, file.getFormatVersion(), Double.MIN_VALUE);
177 Assert.assertEquals("N", file.getFileType());
178 Assert.assertEquals(SatelliteSystem.BEIDOU, file.getSatelliteSystem());
179 Assert.assertEquals("Converto v3.5.5", file.getProgramName());
180 Assert.assertEquals("IGN", file.getAgencyName());
181 Assert.assertEquals("20210224", file.getCreationDateString());
182 Assert.assertEquals("012052", file.getCreationTimeString());
183 Assert.assertEquals("UTC", file.getCreationTimeZoneString());
184 Assert.assertEquals(4, file.getNumberOfLeapSeconds());
185
186
187 Assert.assertEquals(0, file.getGalileoNavigationMessages().size());
188 Assert.assertEquals(0, file.getQZSSNavigationMessages().size());
189 Assert.assertEquals(2, file.getBeidouNavigationMessages().size());
190 Assert.assertEquals(0, file.getIRNSSNavigationMessages().size());
191 Assert.assertEquals(0, file.getGlonassNavigationMessages().size());
192 Assert.assertEquals(0, file.getSBASNavigationMessages().size());
193 Assert.assertEquals(0, file.getGPSNavigationMessages().size());
194
195 final BeidouNavigationMessage bdt = file.getBeidouNavigationMessages("C02").get(0);
196 Assert.assertEquals(0.0, bdt.getEpochToc().durationFrom(new AbsoluteDate(2021, 2, 22, 22, 0, 0, TimeScalesFactory.getBDT())), Double.MIN_VALUE);
197 Assert.assertEquals(4.916836041957e-04, bdt.getAf0(), 1.0e-15);
198 Assert.assertEquals(-3.058442388237e-11, bdt.getAf1(), 1.0e-15);
199 Assert.assertEquals(0.000000000000e+00, bdt.getAf2(), 1.0e-15);
200 Assert.assertEquals(1, bdt.getAODE());
201 Assert.assertEquals(2.775156250000e+02, bdt.getCrs(), 1.0e-15);
202 Assert.assertEquals(-2.539159755499e+00, bdt.getM0(), 1.0e-15);
203 Assert.assertEquals(9.234994649887e-06, bdt.getCuc(), 1.0e-15);
204 Assert.assertEquals(9.814361110330e-04, bdt.getE(), 1.0e-15);
205 Assert.assertEquals(9.856652468443e-06, bdt.getCus(), 1.0e-15);
206 Assert.assertEquals(6.493364431381e+03, FastMath.sqrt(bdt.getSma()), 1.0e-15);
207 Assert.assertEquals(1.656000000000e+05, bdt.getTime(), 1.0e-15);
208 Assert.assertEquals(8.055940270424e-08, bdt.getCic(), 1.0e-15);
209 Assert.assertEquals(2.930216013841e+00, bdt.getOmega0(), 1.0e-15);
210 Assert.assertEquals(-1.355074346066e-07, bdt.getCis(), 1.0e-15);
211 Assert.assertEquals(6.617987281734e-02, bdt.getI0(), 1.0e-15);
212 Assert.assertEquals(-2.970000000000e+02, bdt.getCrc(), 1.0e-15);
213 Assert.assertEquals(5.859907097566e-01, bdt.getPa(), 1.0e-15);
214 Assert.assertEquals(4.416612541069e-09, bdt.getOmegaDot(), 1.0e-15);
215 Assert.assertEquals(-4.628764235181e-10, bdt.getIDot(), 1.0e-15);
216 Assert.assertEquals(790, bdt.getWeek());
217 Assert.assertEquals(2.000000000000e+00, bdt.getSvAccuracy(), 1.0e-15);
218 Assert.assertEquals(1.500000000000e-09, bdt.getTGD1(), 1.0e-15);
219 Assert.assertEquals(-1.370000000000e-08, bdt.getTGD2(), 1.0e-15);
220
221 }
222
223 @Test
224 public void testGalileoRinex302() throws URISyntaxException, IOException {
225
226
227 final String ex = "/gnss/navigation/Example_Galileo_Rinex302.n";
228 final RinexNavigation file = new RinexNavigationParser().
229 parse(new DataSource(ex, () -> getClass().getResourceAsStream(ex)));
230
231
232 Assert.assertEquals(3.02, file.getFormatVersion(), Double.MIN_VALUE);
233 Assert.assertEquals("N", file.getFileType());
234 Assert.assertEquals(SatelliteSystem.GALILEO, file.getSatelliteSystem());
235 Assert.assertEquals("sbf2rin-10.2.0", file.getProgramName());
236 Assert.assertEquals("", file.getAgencyName());
237 Assert.assertEquals("20160428", file.getCreationDateString());
238 Assert.assertEquals("003637", file.getCreationTimeString());
239 Assert.assertEquals("LCL", file.getCreationTimeZoneString());
240 Assert.assertEquals("GAL", file.getIonosphericCorrectionType());
241 Assert.assertEquals(3.5500E+01, file.getNeQuickAlpha()[0], Double.MIN_VALUE);
242 Assert.assertEquals(-2.3438E-02, file.getNeQuickAlpha()[1], Double.MIN_VALUE);
243 Assert.assertEquals(1.6632E-02, file.getNeQuickAlpha()[2], Double.MIN_VALUE);
244 Assert.assertEquals(0.0000E+00, file.getNeQuickAlpha()[3], Double.MIN_VALUE);
245 Assert.assertEquals("GPGA", file.getTimeSystemCorrections().get(0).getTimeSystemCorrectionType());
246 Assert.assertEquals("GAUT", file.getTimeSystemCorrections().get(1).getTimeSystemCorrectionType());
247 Assert.assertEquals(-2.9103830457E-11, file.getTimeSystemCorrections().get(0).getTimeSystemCorrectionA0(), Double.MIN_VALUE);
248 Assert.assertEquals(-4.440892099E-16, file.getTimeSystemCorrections().get(0).getTimeSystemCorrectionA1(), Double.MIN_VALUE);
249 Assert.assertEquals(918000, file.getTimeSystemCorrections().get(0).getTimeSystemCorrectionSecOfWeek());
250 Assert.assertEquals(1919, file.getTimeSystemCorrections().get(0).getTimeSystemCorrectionWeekNumber());
251 Assert.assertEquals("", file.getComments());
252 Assert.assertEquals(17, file.getNumberOfLeapSeconds());
253
254
255 Assert.assertEquals(2, file.getGalileoNavigationMessages().size());
256 Assert.assertEquals(0, file.getQZSSNavigationMessages().size());
257 Assert.assertEquals(0, file.getBeidouNavigationMessages().size());
258 Assert.assertEquals(0, file.getIRNSSNavigationMessages().size());
259 Assert.assertEquals(0, file.getGlonassNavigationMessages().size());
260 Assert.assertEquals(0, file.getSBASNavigationMessages().size());
261 Assert.assertEquals(0, file.getGPSNavigationMessages().size());
262
263 final GalileoNavigationMessage gal = file.getGalileoNavigationMessages("E08").get(3);
264 Assert.assertEquals(0.0, gal.getEpochToc().durationFrom(new AbsoluteDate(2016, 4, 26, 5, 50, 0, TimeScalesFactory.getGST())), Double.MIN_VALUE);
265 Assert.assertEquals(1.646681921557E-03, gal.getAf0(), 1.0e-15);
266 Assert.assertEquals(3.988276375821E-10, gal.getAf1(), 1.0e-15);
267 Assert.assertEquals(0.000000000000e+00, gal.getAf2(), 1.0e-15);
268 Assert.assertEquals(285, gal.getIODNav());
269 Assert.assertEquals(-1.550000000000E+01, gal.getCrs(), 1.0e-15);
270 Assert.assertEquals(-1.881713322719E+00, gal.getM0(), 1.0e-15);
271 Assert.assertEquals(-9.220093488693E-07, gal.getCuc(), 1.0e-15);
272 Assert.assertEquals(2.031255280599E-04, gal.getE(), 1.0e-15);
273 Assert.assertEquals(8.771196007729E-06, gal.getCus(), 1.0e-15);
274 Assert.assertEquals(5.440611787796E+03, FastMath.sqrt(gal.getSma()), 1.0e-15);
275 Assert.assertEquals(1.938000000000E+05, gal.getTime(), 1.0e-15);
276 Assert.assertEquals(7.450580596924E-09, gal.getCic(), 1.0e-15);
277 Assert.assertEquals(-1.589621838359E-01, gal.getOmega0(), 1.0e-15);
278 Assert.assertEquals(5.401670932770E-08, gal.getCis(), 1.0e-15);
279 Assert.assertEquals(9.594902351453E-01, gal.getI0(), 1.0e-15);
280 Assert.assertEquals(1.494687500000E+02, gal.getCrc(), 1.0e-15);
281 Assert.assertEquals(-1.602015041031E+00, gal.getPa(), 1.0e-15);
282 Assert.assertEquals(-5.460941755858E-09, gal.getOmegaDot(), 1.0e-15);
283 Assert.assertEquals(-6.350264514006E-10, gal.getIDot(), 1.0e-15);
284 Assert.assertEquals(1894, gal.getWeek());
285 Assert.assertEquals(3.120000000000E+00, gal.getSisa(), 1.0e-15);
286 Assert.assertEquals(0.000000000000e+00, gal.getSvHealth(), 1.0e-15);
287 Assert.assertEquals(-7.450580596924E-09, gal.getBGDE1E5a(), 1.0e-15);
288 Assert.assertEquals(0.000000000000E+00, gal.getBGDE5bE1(), 1.0e-15);
289
290 }
291
292 @Test
293 public void testQZSSRinex302() throws URISyntaxException, IOException {
294
295 final String ex = "/gnss/navigation/Example_QZSS_Rinex302.n";
296 final RinexNavigation file = new RinexNavigationParser().
297 parse(new DataSource(ex, () -> getClass().getResourceAsStream(ex)));
298
299
300 Assert.assertEquals(3.02, file.getFormatVersion(), Double.MIN_VALUE);
301 Assert.assertEquals("N", file.getFileType());
302 Assert.assertEquals(SatelliteSystem.QZSS, file.getSatelliteSystem());
303 Assert.assertEquals("NetR9 5.45", file.getProgramName());
304 Assert.assertEquals("Receiver Operator", file.getAgencyName());
305 Assert.assertEquals("20200609", file.getCreationDateString());
306 Assert.assertEquals("000000", file.getCreationTimeString());
307 Assert.assertEquals("UTC", file.getCreationTimeZoneString());
308 Assert.assertEquals("QZS", file.getIonosphericCorrectionType());
309 Assert.assertEquals(0.5588e-08, file.getKlobucharAlpha()[0], Double.MIN_VALUE);
310 Assert.assertEquals(0.7451e-08, file.getKlobucharAlpha()[1], Double.MIN_VALUE);
311 Assert.assertEquals(-0.4768e-06, file.getKlobucharAlpha()[2], Double.MIN_VALUE);
312 Assert.assertEquals(-0.1013e-05, file.getKlobucharAlpha()[3], Double.MIN_VALUE);
313 Assert.assertEquals(0.8602e+05, file.getKlobucharBeta()[0], Double.MIN_VALUE);
314 Assert.assertEquals(-0.4096e+06, file.getKlobucharBeta()[1], Double.MIN_VALUE);
315 Assert.assertEquals(-0.8389e+07, file.getKlobucharBeta()[2], Double.MIN_VALUE);
316 Assert.assertEquals(-0.8389e+07, file.getKlobucharBeta()[3], Double.MIN_VALUE);
317 Assert.assertEquals("QZUT", file.getTimeSystemCorrections().get(0).getTimeSystemCorrectionType());
318 Assert.assertEquals(0.0, file.getTimeSystemCorrections().get(0).getTimeSystemCorrectionA0(), Double.MIN_VALUE);
319 Assert.assertEquals(0.0, file.getTimeSystemCorrections().get(0).getTimeSystemCorrectionA1(), Double.MIN_VALUE);
320 Assert.assertEquals(356352, file.getTimeSystemCorrections().get(0).getTimeSystemCorrectionSecOfWeek());
321 Assert.assertEquals(2109, file.getTimeSystemCorrections().get(0).getTimeSystemCorrectionWeekNumber());
322 Assert.assertEquals("", file.getComments());
323 Assert.assertEquals(18, file.getNumberOfLeapSeconds());
324
325
326 Assert.assertEquals(0, file.getGalileoNavigationMessages().size());
327 Assert.assertEquals(3, file.getQZSSNavigationMessages().size());
328 Assert.assertEquals(0, file.getBeidouNavigationMessages().size());
329 Assert.assertEquals(0, file.getIRNSSNavigationMessages().size());
330 Assert.assertEquals(0, file.getGlonassNavigationMessages().size());
331 Assert.assertEquals(0, file.getSBASNavigationMessages().size());
332 Assert.assertEquals(0, file.getGPSNavigationMessages().size());
333
334 final QZSSNavigationMessage qzs = file.getQZSSNavigationMessages("J07").get(0);
335 Assert.assertEquals(0.0, qzs.getEpochToc().durationFrom(new AbsoluteDate(2020, 6, 9, 0, 0, 0, TimeScalesFactory.getQZSS())), Double.MIN_VALUE);
336 Assert.assertEquals(-0.214204192162e-07, qzs.getAf0(), 1.0e-15);
337 Assert.assertEquals(0.000000000000e+00, qzs.getAf1(), 1.0e-15);
338 Assert.assertEquals(0.000000000000e+00, qzs.getAf2(), 1.0e-15);
339 Assert.assertEquals(189, qzs.getIODE());
340 Assert.assertEquals(-0.580312500000e+03, qzs.getCrs(), 1.0e-15);
341 Assert.assertEquals(-0.104204506497e+01, qzs.getM0(), 1.0e-15);
342 Assert.assertEquals(-0.190474092960e-04, qzs.getCuc(), 1.0e-15);
343 Assert.assertEquals(0.140047399327e-03, qzs.getE(), 1.0e-15);
344 Assert.assertEquals(0.936537981033e-05, qzs.getCus(), 1.0e-15);
345 Assert.assertEquals(0.649355915070e+04, FastMath.sqrt(qzs.getSma()), 1.0e-15);
346 Assert.assertEquals(0.172800000000e+06, qzs.getTime(), 1.0e-15);
347 Assert.assertEquals(-0.241957604885e-05, qzs.getCic(), 1.0e-15);
348 Assert.assertEquals(-0.102838327972e-01, qzs.getOmega0(), 1.0e-15);
349 Assert.assertEquals(0.251457095146e-06, qzs.getCis(), 1.0e-15);
350 Assert.assertEquals(0.107314257498e-02, qzs.getI0(), 1.0e-15);
351 Assert.assertEquals(-0.291156250000e+03, qzs.getCrc(), 1.0e-15);
352 Assert.assertEquals(-0.298090621453e+01, qzs.getPa(), 1.0e-15);
353 Assert.assertEquals(0.116790579082e-08, qzs.getOmegaDot(), 1.0e-15);
354 Assert.assertEquals(0.000000000000e+00, qzs.getIDot(), 1.0e-15);
355 Assert.assertEquals(2109, qzs.getWeek());
356 Assert.assertEquals(0.280000000000e+01, qzs.getSvAccuracy(), 1.0e-15);
357 Assert.assertEquals(0.620000000000e+02, qzs.getSvHealth(), 1.0e-15);
358 Assert.assertEquals(-0.605359673500e-08, qzs.getTGD(), 1.0e-15);
359 Assert.assertEquals(957, qzs.getIODC(), 1.0e-15);
360
361 }
362
363 @Test
364 public void testGLONASSRinex303() throws URISyntaxException, IOException {
365
366
367 final String ex = "/gnss/navigation/Example_Glonass_Rinex303.n";
368 final RinexNavigation file = new RinexNavigationParser().
369 parse(new DataSource(ex, () -> getClass().getResourceAsStream(ex)));
370
371
372 Assert.assertEquals(3.03, file.getFormatVersion(), Double.MIN_VALUE);
373 Assert.assertEquals("N", file.getFileType());
374 Assert.assertEquals(SatelliteSystem.GLONASS, file.getSatelliteSystem());
375 Assert.assertEquals("GR25 V4.30", file.getProgramName());
376 Assert.assertEquals("Institute of Astrono", file.getAgencyName());
377 Assert.assertEquals("20210217", file.getCreationDateString());
378 Assert.assertEquals("235947", file.getCreationTimeString());
379 Assert.assertEquals("UTC", file.getCreationTimeZoneString());
380 Assert.assertEquals("GLUT", file.getTimeSystemCorrections().get(0).getTimeSystemCorrectionType());
381 Assert.assertEquals(6.0535967350e-09, file.getTimeSystemCorrections().get(0).getTimeSystemCorrectionA0(), Double.MIN_VALUE);
382 Assert.assertEquals(0.000000000e+00, file.getTimeSystemCorrections().get(0).getTimeSystemCorrectionA1(), Double.MIN_VALUE);
383 Assert.assertEquals(0, file.getTimeSystemCorrections().get(0).getTimeSystemCorrectionSecOfWeek());
384 Assert.assertEquals(0, file.getTimeSystemCorrections().get(0).getTimeSystemCorrectionWeekNumber());
385 Assert.assertEquals("", file.getComments());
386 Assert.assertEquals(18, file.getNumberOfLeapSeconds());
387
388
389 Assert.assertEquals(0, file.getGalileoNavigationMessages().size());
390 Assert.assertEquals(0, file.getQZSSNavigationMessages().size());
391 Assert.assertEquals(0, file.getBeidouNavigationMessages().size());
392 Assert.assertEquals(0, file.getIRNSSNavigationMessages().size());
393 Assert.assertEquals(3, file.getGlonassNavigationMessages().size());
394 Assert.assertEquals(0, file.getSBASNavigationMessages().size());
395 Assert.assertEquals(0, file.getGPSNavigationMessages().size());
396
397 final GLONASSNavigationMessage glo = file.getGlonassNavigationMessages("R02").get(0);
398 Assert.assertEquals(0.0, glo.getEpochToc().durationFrom(new AbsoluteDate(2021, 2, 17, 23, 45, 0.0, TimeScalesFactory.getGPS())), Double.MIN_VALUE);
399 Assert.assertEquals(-4.674419760704e-04, glo.getTN(), 1.0e-10);
400 Assert.assertEquals(9.094947017729e-13, glo.getGammaN(), 1.0e-10);
401 Assert.assertEquals(84600.0, glo.getTime(), 1.0e-10);
402 Assert.assertEquals(-1252.090332031e+04, glo.getX(), 1.0e-10);
403 Assert.assertEquals(-2661.552429199e+00, glo.getXDot(), 1.0e-10);
404 Assert.assertEquals(0.000000000000e+00, glo.getXDotDot(), 1.0e-10);
405 Assert.assertEquals(0.000000000000e+00, glo.getHealth(), 1.0e-10);
406 Assert.assertEquals(1045.030761719e+04, glo.getY(), 1.0e-10);
407 Assert.assertEquals(3342.580795288e-01, glo.getYDot(), 1.0e-10);
408 Assert.assertEquals(0.000000000000e+00, glo.getYDotDot(), 1.0e-10);
409 Assert.assertEquals(-4, glo.getFrequencyNumber());
410 Assert.assertEquals(1963.127978516e+04, glo.getZ(), 1.0e-10);
411 Assert.assertEquals(-1884.816169739e+00, glo.getZDot(), 1.0e-10);
412 Assert.assertEquals(-1862.645149231e-09, glo.getZDotDot(), 1.0e-10);
413
414 }
415
416 @Test
417 public void testIRNSSRinex303() throws URISyntaxException, IOException {
418
419 final String ex = "/gnss/navigation/Example_IRNSS_Rinex303.n";
420 final RinexNavigation file = new RinexNavigationParser().
421 parse(new DataSource(ex, () -> getClass().getResourceAsStream(ex)));
422
423
424 Assert.assertEquals(3.03, file.getFormatVersion(), Double.MIN_VALUE);
425 Assert.assertEquals("N", file.getFileType());
426 Assert.assertEquals(SatelliteSystem.IRNSS, file.getSatelliteSystem());
427 Assert.assertEquals("JPS2RIN v.2.0.168", file.getProgramName());
428 Assert.assertEquals("JAVAD GNSS", file.getAgencyName());
429 Assert.assertEquals("20191028", file.getCreationDateString());
430 Assert.assertEquals("005648", file.getCreationTimeString());
431 Assert.assertEquals("UTC", file.getCreationTimeZoneString());
432 Assert.assertEquals(18, file.getNumberOfLeapSeconds());
433
434
435 Assert.assertEquals(0, file.getGalileoNavigationMessages().size());
436 Assert.assertEquals(0, file.getQZSSNavigationMessages().size());
437 Assert.assertEquals(0, file.getBeidouNavigationMessages().size());
438 Assert.assertEquals(3, file.getIRNSSNavigationMessages().size());
439 Assert.assertEquals(0, file.getGlonassNavigationMessages().size());
440 Assert.assertEquals(0, file.getSBASNavigationMessages().size());
441 Assert.assertEquals(0, file.getGPSNavigationMessages().size());
442
443 final IRNSSNavigationMessage irnss = file.getIRNSSNavigationMessages("I05").get(0);
444 Assert.assertEquals(0.0, irnss.getEpochToc().durationFrom(new AbsoluteDate(2019, 10, 27, 0, 0, 0, TimeScalesFactory.getIRNSS())), Double.MIN_VALUE);
445 Assert.assertEquals(4.232432693243e-04, irnss.getAf0(), 1.0e-15);
446 Assert.assertEquals(2.000888343900e-11, irnss.getAf1(), 1.0e-15);
447 Assert.assertEquals(0.000000000000e+00, irnss.getAf2(), 1.0e-15);
448 Assert.assertEquals(0, irnss.getIODEC());
449 Assert.assertEquals(4.608125000000e+02, irnss.getCrs(), 1.0e-15);
450 Assert.assertEquals(-2.259193667639e+00, irnss.getM0(), 1.0e-15);
451 Assert.assertEquals(1.492351293564e-05, irnss.getCuc(), 1.0e-15);
452 Assert.assertEquals(2.073186333291e-03, irnss.getE(), 1.0e-15);
453 Assert.assertEquals(-2.183392643929e-05, irnss.getCus(), 1.0e-15);
454 Assert.assertEquals(6.493289260864e+03, FastMath.sqrt(irnss.getSma()), 1.0e-15);
455 Assert.assertEquals(0.000000000000e+00, irnss.getTime(), 1.0e-15);
456 Assert.assertEquals(-2.868473529816e-07, irnss.getCic(), 1.0e-15);
457 Assert.assertEquals(1.135843714918e+00, irnss.getOmega0(), 1.0e-15);
458 Assert.assertEquals(-5.215406417847e-08, irnss.getCis(), 1.0e-15);
459 Assert.assertEquals(5.007869522210e-01, irnss.getI0(), 1.0e-15);
460 Assert.assertEquals(7.530000000000e+02, irnss.getCrc(), 1.0e-15);
461 Assert.assertEquals(3.073412769875e+00, irnss.getPa(), 1.0e-15);
462 Assert.assertEquals(-5.227360597694e-09, irnss.getOmegaDot(), 1.0e-15);
463 Assert.assertEquals(4.421612749348e-10, irnss.getIDot(), 1.0e-15);
464 Assert.assertEquals(2077, irnss.getWeek());
465 Assert.assertEquals(2.000000000000e+00, irnss.getURA(), 1.0e-15);
466 Assert.assertEquals(0.000000000000e+00, irnss.getSvHealth(), 1.0e-15);
467 Assert.assertEquals(-4.656613000000e-10, irnss.getTGD(), 1.0e-15);
468
469 }
470
471 @Test
472 public void testMixedRinex304() throws URISyntaxException, IOException {
473
474
475 final String ex = "/gnss/navigation/Example_Mixed_Rinex304.n";
476 final RinexNavigation file = new RinexNavigationParser().
477 parse(new DataSource(ex, () -> getClass().getResourceAsStream(ex)));
478
479
480 Assert.assertEquals(3.04, file.getFormatVersion(), Double.MIN_VALUE);
481 Assert.assertEquals("N", file.getFileType());
482 Assert.assertEquals(SatelliteSystem.MIXED, file.getSatelliteSystem());
483 Assert.assertEquals("Alloy 5.37", file.getProgramName());
484 Assert.assertEquals("Receiver Operator", file.getAgencyName());
485 Assert.assertEquals("20200211", file.getCreationDateString());
486 Assert.assertEquals("000000", file.getCreationTimeString());
487 Assert.assertEquals("UTC", file.getCreationTimeZoneString());
488 Assert.assertEquals(0.8382E-08, file.getKlobucharAlpha()[0], Double.MIN_VALUE);
489 Assert.assertEquals(-0.7451E-08, file.getKlobucharAlpha()[1], Double.MIN_VALUE);
490 Assert.assertEquals(-0.5960E-07, file.getKlobucharAlpha()[2], Double.MIN_VALUE);
491 Assert.assertEquals(0.5960E-07, file.getKlobucharAlpha()[3], Double.MIN_VALUE);
492 Assert.assertEquals(0.8806E+05, file.getKlobucharBeta()[0], Double.MIN_VALUE);
493 Assert.assertEquals(-0.1638E+05, file.getKlobucharBeta()[1], Double.MIN_VALUE);
494 Assert.assertEquals(-0.1966E+06, file.getKlobucharBeta()[2], Double.MIN_VALUE);
495 Assert.assertEquals(0.6554E+05, file.getKlobucharBeta()[3], Double.MIN_VALUE);
496 Assert.assertEquals(0.4200E+02, file.getNeQuickAlpha()[0], Double.MIN_VALUE);
497 Assert.assertEquals(0.1563E-01, file.getNeQuickAlpha()[1], Double.MIN_VALUE);
498 Assert.assertEquals(0.2045E-02, file.getNeQuickAlpha()[2], Double.MIN_VALUE);
499 Assert.assertEquals(0.0000E+00, file.getNeQuickAlpha()[3], Double.MIN_VALUE);
500 Assert.assertEquals("GPUT", file.getTimeSystemCorrections().get(0).getTimeSystemCorrectionType());
501 Assert.assertEquals("GAUT", file.getTimeSystemCorrections().get(1).getTimeSystemCorrectionType());
502 Assert.assertEquals("GPGA", file.getTimeSystemCorrections().get(2).getTimeSystemCorrectionType());
503 Assert.assertEquals(18, file.getNumberOfLeapSeconds());
504
505
506 Assert.assertEquals(0, file.getGalileoNavigationMessages().size());
507 Assert.assertEquals(0, file.getQZSSNavigationMessages().size());
508 Assert.assertEquals(2, file.getBeidouNavigationMessages().size());
509 Assert.assertEquals(0, file.getIRNSSNavigationMessages().size());
510 Assert.assertEquals(1, file.getGlonassNavigationMessages().size());
511 Assert.assertEquals(0, file.getSBASNavigationMessages().size());
512 Assert.assertEquals(2, file.getGPSNavigationMessages().size());
513
514 final GLONASSNavigationMessage glo = file.getGlonassNavigationMessages("R05").get(0);
515 Assert.assertEquals(0.0, glo.getEpochToc().durationFrom(new AbsoluteDate(2020, 2, 10, 23, 45, 0.0, TimeScalesFactory.getGPS())), Double.MIN_VALUE);
516 Assert.assertEquals(-0.447863712907e-04, glo.getTN(), 1.0e-10);
517 Assert.assertEquals(0.909494701773e-12, glo.getGammaN(), 1.0e-10);
518 Assert.assertEquals(86370.0, glo.getTime(), 1.0e-10);
519 Assert.assertEquals(0182.817373047e+05, glo.getX(), 1.0e-10);
520 Assert.assertEquals(-176.770305634e+01, glo.getXDot(), 1.0e-10);
521 Assert.assertEquals(651.925802231e-08, glo.getXDotDot(), 1.0e-10);
522 Assert.assertEquals(0.000000000000e+00, glo.getHealth(), 1.0e-10);
523 Assert.assertEquals(0114.389570312e+05, glo.getY(), 1.0e-10);
524 Assert.assertEquals(-619.493484497e+00, glo.getYDot(), 1.0e-10);
525 Assert.assertEquals(279.396772385e-08, glo.getYDotDot(), 1.0e-10);
526 Assert.assertEquals(1, glo.getFrequencyNumber());
527 Assert.assertEquals(136.489028320e+05, glo.getZ(), 1.0e-10);
528 Assert.assertEquals(288.632869720e+01, glo.getZDot(), 1.0e-10);
529 Assert.assertEquals(0.000000000000e+00, glo.getZDotDot(), 1.0e-10);
530
531 }
532
533 @Test
534 public void testQZSSRinex304() throws URISyntaxException, IOException {
535
536 final String ex = "/gnss/navigation/Example_QZSS_Rinex304.n";
537 final RinexNavigation file = new RinexNavigationParser().
538 parse(new DataSource(ex, () -> getClass().getResourceAsStream(ex)));
539
540
541 Assert.assertEquals(3.04, file.getFormatVersion(), Double.MIN_VALUE);
542 Assert.assertEquals("N", file.getFileType());
543 Assert.assertEquals(SatelliteSystem.QZSS, file.getSatelliteSystem());
544 Assert.assertEquals("JPS2RIN v.2.0.191", file.getProgramName());
545 Assert.assertEquals("JAVAD GNSS", file.getAgencyName());
546 Assert.assertEquals("20200610", file.getCreationDateString());
547 Assert.assertEquals("003246", file.getCreationTimeString());
548 Assert.assertEquals("UTC", file.getCreationTimeZoneString());
549 Assert.assertEquals(18, file.getNumberOfLeapSeconds());
550
551
552 Assert.assertEquals(0, file.getGalileoNavigationMessages().size());
553 Assert.assertEquals(3, file.getQZSSNavigationMessages().size());
554 Assert.assertEquals(0, file.getBeidouNavigationMessages().size());
555 Assert.assertEquals(0, file.getIRNSSNavigationMessages().size());
556 Assert.assertEquals(0, file.getGlonassNavigationMessages().size());
557 Assert.assertEquals(0, file.getSBASNavigationMessages().size());
558 Assert.assertEquals(0, file.getGPSNavigationMessages().size());
559
560 final QZSSNavigationMessage qzs = file.getQZSSNavigationMessages("J03").get(0);
561 Assert.assertEquals(0.0, qzs.getEpochToc().durationFrom(new AbsoluteDate(2020, 6, 9, 1, 0, 0, TimeScalesFactory.getQZSS())), Double.MIN_VALUE);
562 Assert.assertEquals(-3.880355507135e-06, qzs.getAf0(), 1.0e-15);
563 Assert.assertEquals(-4.547473508865e-13, qzs.getAf1(), 1.0e-15);
564 Assert.assertEquals(0.000000000000e+00, qzs.getAf2(), 1.0e-15);
565 Assert.assertEquals(193, qzs.getIODE());
566 Assert.assertEquals(3.106250000000e+02, qzs.getCrs(), 1.0e-15);
567 Assert.assertEquals(2.226495657955e+00, qzs.getM0(), 1.0e-15);
568 Assert.assertEquals(7.346272468567e-06, qzs.getCuc(), 1.0e-15);
569 Assert.assertEquals(7.470769551583e-02, qzs.getE(), 1.0e-15);
570 Assert.assertEquals(-2.568960189819e-05, qzs.getCus(), 1.0e-15);
571 Assert.assertEquals(6.493781688690e+03, FastMath.sqrt(qzs.getSma()), 1.0e-15);
572 Assert.assertEquals(1.764000000000e+05, qzs.getTime(), 1.0e-15);
573 Assert.assertEquals(-1.853331923485e-06, qzs.getCic(), 1.0e-15);
574 Assert.assertEquals(2.023599801546e+00, qzs.getOmega0(), 1.0e-15);
575 Assert.assertEquals(1.644715666771e-06, qzs.getCis(), 1.0e-15);
576 Assert.assertEquals(7.122509413449e-01, qzs.getI0(), 1.0e-15);
577 Assert.assertEquals(9.670937500000e+02, qzs.getCrc(), 1.0e-15);
578 Assert.assertEquals(-1.550179221884e+00, qzs.getPa(), 1.0e-15);
579 Assert.assertEquals(-1.478633019572e-09, qzs.getOmegaDot(), 1.0e-15);
580 Assert.assertEquals(-7.193156766709e-10, qzs.getIDot(), 1.0e-15);
581 Assert.assertEquals(2109, qzs.getWeek());
582 Assert.assertEquals(2.000000000000e+00, qzs.getSvAccuracy(), 1.0e-15);
583 Assert.assertEquals(0.000000000000e+00, qzs.getSvHealth(), 1.0e-15);
584 Assert.assertEquals(0.000000000000e+00, qzs.getTGD(), 1.0e-15);
585 Assert.assertEquals(961, qzs.getIODC(), 1.0e-15);
586
587 }
588
589 @Test
590 public void testGpsRinex304() throws URISyntaxException, IOException {
591
592
593 final String ex = "/gnss/navigation/Example_GPS_Rinex304.n";
594 final RinexNavigation file = new RinexNavigationParser().
595 parse(new DataSource(ex, () -> getClass().getResourceAsStream(ex)));
596
597
598 Assert.assertEquals(3.04, file.getFormatVersion(), Double.MIN_VALUE);
599 Assert.assertEquals("N", file.getFileType());
600 Assert.assertEquals(SatelliteSystem.GPS, file.getSatelliteSystem());
601 Assert.assertEquals("sbf2rin-13.8.0", file.getProgramName());
602 Assert.assertEquals("", file.getAgencyName());
603 Assert.assertEquals("20210307", file.getCreationDateString());
604 Assert.assertEquals("000819", file.getCreationTimeString());
605 Assert.assertEquals("UTC", file.getCreationTimeZoneString());
606 Assert.assertEquals(0.0, file.getCreationDate().durationFrom(new AbsoluteDate(2021, 3, 7, 0, 8, 19.0, TimeScalesFactory.getUTC())), 0.0);
607 Assert.assertEquals("GPS", file.getIonosphericCorrectionType());
608 Assert.assertEquals(1.0245E-08, file.getKlobucharAlpha()[0], Double.MIN_VALUE);
609 Assert.assertEquals(0.0000E+00, file.getKlobucharAlpha()[1], Double.MIN_VALUE);
610 Assert.assertEquals(-5.9605E-08, file.getKlobucharAlpha()[2], Double.MIN_VALUE);
611 Assert.assertEquals(0.0000E+00, file.getKlobucharAlpha()[3], Double.MIN_VALUE);
612 Assert.assertEquals(9.0112E+04, file.getKlobucharBeta()[0], Double.MIN_VALUE);
613 Assert.assertEquals(0.0000E+00, file.getKlobucharBeta()[1], Double.MIN_VALUE);
614 Assert.assertEquals(-1.9661E+05, file.getKlobucharBeta()[2], Double.MIN_VALUE);
615 Assert.assertEquals(0.0000E+00, file.getKlobucharBeta()[3], Double.MIN_VALUE);
616 Assert.assertEquals("GPUT", file.getTimeSystemCorrections().get(0).getTimeSystemCorrectionType());
617 Assert.assertEquals(0.0000000000E+00, file.getTimeSystemCorrections().get(0).getTimeSystemCorrectionA0(), Double.MIN_VALUE);
618 Assert.assertEquals(9.769962617E-15, file.getTimeSystemCorrections().get(0).getTimeSystemCorrectionA1(), Double.MIN_VALUE);
619 Assert.assertEquals(233472, file.getTimeSystemCorrections().get(0).getTimeSystemCorrectionSecOfWeek());
620 Assert.assertEquals(2148, file.getTimeSystemCorrections().get(0).getTimeSystemCorrectionWeekNumber());
621 Assert.assertEquals(18, file.getNumberOfLeapSeconds());
622
623
624 Assert.assertEquals(0, file.getGalileoNavigationMessages().size());
625 Assert.assertEquals(0, file.getQZSSNavigationMessages().size());
626 Assert.assertEquals(0, file.getBeidouNavigationMessages().size());
627 Assert.assertEquals(0, file.getIRNSSNavigationMessages().size());
628 Assert.assertEquals(0, file.getGlonassNavigationMessages().size());
629 Assert.assertEquals(0, file.getSBASNavigationMessages().size());
630 Assert.assertEquals(3, file.getGPSNavigationMessages().size());
631
632 final GPSNavigationMessage gps = file.getGPSNavigationMessages("G01").get(0);
633 Assert.assertEquals(0.0, gps.getEpochToc().durationFrom(new AbsoluteDate(2021, 3, 5, 23, 59, 44, TimeScalesFactory.getGPS())), Double.MIN_VALUE);
634 Assert.assertEquals(7.477793842554E-04, gps.getAf0(), 1.0e-15);
635 Assert.assertEquals(-8.412825991400E-12, gps.getAf1(), 1.0e-15);
636 Assert.assertEquals(0.000000000000e+00, gps.getAf2(), 1.0e-15);
637 Assert.assertEquals(9, gps.getIODE());
638 Assert.assertEquals(-7.434375000000E+01, gps.getCrs(), 1.0e-15);
639 Assert.assertEquals(1.258707807055E+00, gps.getM0(), 1.0e-15);
640 Assert.assertEquals(-3.753229975700E-06, gps.getCuc(), 1.0e-15);
641 Assert.assertEquals(1.047585485503E-02, gps.getE(), 1.0e-15);
642 Assert.assertEquals(7.394701242447E-06, gps.getCus(), 1.0e-15);
643 Assert.assertEquals(5.153690633774E+03, FastMath.sqrt(gps.getSma()), 1.0e-15);
644 Assert.assertEquals(5.183840000000E+05, gps.getTime(), 1.0e-15);
645 Assert.assertEquals(-1.359730958939E-07, gps.getCic(), 1.0e-15);
646 Assert.assertEquals(-1.936900950511E+00, gps.getOmega0(), 1.0e-15);
647 Assert.assertEquals(1.136213541031E-07, gps.getCis(), 1.0e-15);
648 Assert.assertEquals(9.833041013284E-01, gps.getI0(), 1.0e-15);
649 Assert.assertEquals(2.525937500000E+02, gps.getCrc(), 1.0e-15);
650 Assert.assertEquals(8.208058952773E-01, gps.getPa(), 1.0e-15);
651 Assert.assertEquals(-8.015691028563E-09, gps.getOmegaDot(), 1.0e-15);
652 Assert.assertEquals(-1.053615315878E-10, gps.getIDot(), 1.0e-15);
653 Assert.assertEquals(2147, gps.getWeek());
654 Assert.assertEquals(2.000000000000E+00, gps.getSvAccuracy(), 1.0e-15);
655 Assert.assertEquals(0.000000000000e+00, gps.getSvHealth(), 1.0e-15);
656 Assert.assertEquals(4.656612873077E-09, gps.getTGD(), 1.0e-15);
657 Assert.assertEquals(9, gps.getIODC());
658
659 }
660
661 @Test
662 public void testGalileoRinex304() throws URISyntaxException, IOException {
663
664
665 final String ex = "/gnss/navigation/Example_Galileo_Rinex304.n";
666 final RinexNavigation file = new RinexNavigationParser().
667 parse(new DataSource(ex, () -> getClass().getResourceAsStream(ex)));
668
669
670 Assert.assertEquals(3.04, file.getFormatVersion(), Double.MIN_VALUE);
671 Assert.assertEquals("N", file.getFileType());
672 Assert.assertEquals(SatelliteSystem.GALILEO, file.getSatelliteSystem());
673 Assert.assertEquals("JPS2RIN v.2.0.191", file.getProgramName());
674 Assert.assertEquals("JAVAD GNSS", file.getAgencyName());
675 Assert.assertEquals("20210307", file.getCreationDateString());
676 Assert.assertEquals("000245", file.getCreationTimeString());
677 Assert.assertEquals("UTC", file.getCreationTimeZoneString());
678 Assert.assertEquals("GAL", file.getIonosphericCorrectionType());
679 Assert.assertEquals(5.0500E+01, file.getNeQuickAlpha()[0], Double.MIN_VALUE);
680 Assert.assertEquals(2.7344E-02, file.getNeQuickAlpha()[1], Double.MIN_VALUE);
681 Assert.assertEquals(-1.5869E-03, file.getNeQuickAlpha()[2], Double.MIN_VALUE);
682 Assert.assertEquals(0.0000E+00, file.getNeQuickAlpha()[3], Double.MIN_VALUE);
683 Assert.assertEquals(18, file.getNumberOfLeapSeconds());
684
685
686 Assert.assertEquals(1, file.getGalileoNavigationMessages().size());
687 Assert.assertEquals(0, file.getQZSSNavigationMessages().size());
688 Assert.assertEquals(0, file.getBeidouNavigationMessages().size());
689 Assert.assertEquals(0, file.getIRNSSNavigationMessages().size());
690 Assert.assertEquals(0, file.getGlonassNavigationMessages().size());
691 Assert.assertEquals(0, file.getSBASNavigationMessages().size());
692 Assert.assertEquals(0, file.getGPSNavigationMessages().size());
693
694 final GalileoNavigationMessage gal = file.getGalileoNavigationMessages("E13").get(1);
695 Assert.assertEquals(0.0, gal.getEpochToc().durationFrom(new AbsoluteDate(2021, 3, 5, 22, 30, 0, TimeScalesFactory.getGST())), Double.MIN_VALUE);
696 Assert.assertEquals(4.131024470553e-04, gal.getAf0(), 1.0e-15);
697 Assert.assertEquals(5.400124791777e-13, gal.getAf1(), 1.0e-15);
698 Assert.assertEquals(0.000000000000e+00, gal.getAf2(), 1.0e-15);
699 Assert.assertEquals(87, gal.getIODNav());
700 Assert.assertEquals(-1.010000000000e+02, gal.getCrs(), 1.0e-15);
701 Assert.assertEquals(1.781709410229e+00, gal.getM0(), 1.0e-15);
702 Assert.assertEquals(-4.542991518974e-06, gal.getCuc(), 1.0e-15);
703 Assert.assertEquals(3.459260333329e-04, gal.getE(), 1.0e-15);
704 Assert.assertEquals(5.345791578293e-06, gal.getCus(), 1.0e-15);
705 Assert.assertEquals(5.440610326767e+03, FastMath.sqrt(gal.getSma()), 1.0e-15);
706 Assert.assertEquals(5.130000000000e+05, gal.getTime(), 1.0e-15);
707 Assert.assertEquals(6.332993507385e-08, gal.getCic(), 1.0e-15);
708 Assert.assertEquals(-2.165492556291e+00, gal.getOmega0(), 1.0e-15);
709 Assert.assertEquals(-4.842877388000e-08, gal.getCis(), 1.0e-15);
710 Assert.assertEquals(9.941388485934e-01, gal.getI0(), 1.0e-15);
711 Assert.assertEquals(2.392812500000e+02, gal.getCrc(), 1.0e-15);
712 Assert.assertEquals(-9.613560467153e-01, gal.getPa(), 1.0e-15);
713 Assert.assertEquals(-5.551302662610e-09, gal.getOmegaDot(), 1.0e-15);
714 Assert.assertEquals(-8.321775206769e-11, gal.getIDot(), 1.0e-15);
715 Assert.assertEquals(2147, gal.getWeek());
716 Assert.assertEquals(3.119999885559e+00, gal.getSisa(), 1.0e-15);
717 Assert.assertEquals(0.000000000000e+00, gal.getSvHealth(), 1.0e-15);
718 Assert.assertEquals(4.656612873077e-10, gal.getBGDE1E5a(), 1.0e-15);
719 Assert.assertEquals(2.328306436539e-10, gal.getBGDE5bE1(), 1.0e-15);
720
721 }
722
723 @Test
724 public void testSBASRinex304() throws URISyntaxException, IOException {
725
726
727 final String ex = "/gnss/navigation/Example_SBAS_Rinex304.n";
728 final RinexNavigation file = new RinexNavigationParser().
729 parse(new DataSource(ex, () -> getClass().getResourceAsStream(ex)));
730
731
732 Assert.assertEquals(3.04, file.getFormatVersion(), Double.MIN_VALUE);
733 Assert.assertEquals("N", file.getFileType());
734 Assert.assertEquals(SatelliteSystem.SBAS, file.getSatelliteSystem());
735 Assert.assertEquals("sbf2rin-13.4.5", file.getProgramName());
736 Assert.assertEquals("RIGTC, GO PECNY", file.getAgencyName());
737 Assert.assertEquals("20210219", file.getCreationDateString());
738 Assert.assertEquals("002627", file.getCreationTimeString());
739 Assert.assertEquals("SBAS NAVIGATION DATA FROM STATION GOP6 (RIGTC, GO PECNY)", file.getComments());
740 Assert.assertEquals("UTC", file.getCreationTimeZoneString());
741
742
743 Assert.assertEquals(0, file.getGalileoNavigationMessages().size());
744 Assert.assertEquals(0, file.getQZSSNavigationMessages().size());
745 Assert.assertEquals(0, file.getBeidouNavigationMessages().size());
746 Assert.assertEquals(0, file.getIRNSSNavigationMessages().size());
747 Assert.assertEquals(0, file.getGlonassNavigationMessages().size());
748 Assert.assertEquals(3, file.getSBASNavigationMessages().size());
749 Assert.assertEquals(0, file.getGPSNavigationMessages().size());
750
751 final SBASNavigationMessage sbas = file.getSBASNavigationMessages("S36").get(0);
752 Assert.assertEquals(0.0, sbas.getEpochToc().durationFrom(new AbsoluteDate(2021, 2, 17, 23, 58, 56.0, TimeScalesFactory.getGPS())), Double.MIN_VALUE);
753 Assert.assertEquals(0.000000000000E+00, sbas.getAGf0(), 1.0e-10);
754 Assert.assertEquals(0.000000000000E+00, sbas.getAGf1(), 1.0e-10);
755 Assert.assertEquals(3.456150000000E+05, sbas.getTime(), 1.0e-10);
756 Assert.assertEquals(4200.368800000E+04, sbas.getX(), 1.0e-10);
757 Assert.assertEquals(0.000000000000E+00, sbas.getXDot(), 1.0e-10);
758 Assert.assertEquals(0.000000000000E+00, sbas.getXDotDot(), 1.0e-10);
759 Assert.assertEquals(6.300000000000E+01, sbas.getHealth(), 1.0e-10);
760 Assert.assertEquals(3674.846960000E+03, sbas.getY(), 1.0e-10);
761 Assert.assertEquals(0.000000000000E+00, sbas.getYDot(), 1.0e-10);
762 Assert.assertEquals(0.000000000000E+00, sbas.getYDotDot(), 1.0e-10);
763 Assert.assertEquals(3.276700000000E+04, sbas.getURA(), 1.0e-10);
764 Assert.assertEquals(0.000000000000E+00, sbas.getZ(), 1.0e-10);
765 Assert.assertEquals(0.000000000000E+00, sbas.getZDot(), 1.0e-10);
766 Assert.assertEquals(0.000000000000E+00, sbas.getZDotDot(), 1.0e-10);
767 Assert.assertEquals(155, sbas.getIODN(), 1.0e-10);
768
769 }
770
771
772 @Test
773 public void testIRNSSRinex304() throws URISyntaxException, IOException {
774
775 final String ex = "/gnss/navigation/Example_IRNSS_Rinex304.n";
776 final RinexNavigation file = new RinexNavigationParser().
777 parse(new DataSource(ex, () -> getClass().getResourceAsStream(ex)));
778
779
780 Assert.assertEquals(3.04, file.getFormatVersion(), Double.MIN_VALUE);
781 Assert.assertEquals("N", file.getFileType());
782 Assert.assertEquals(SatelliteSystem.IRNSS, file.getSatelliteSystem());
783 Assert.assertEquals("JPS2RIN v.2.0.191", file.getProgramName());
784 Assert.assertEquals("JAVAD GNSS", file.getAgencyName());
785 Assert.assertEquals("20210308", file.getCreationDateString());
786 Assert.assertEquals("000304", file.getCreationTimeString());
787 Assert.assertEquals("UTC", file.getCreationTimeZoneString());
788 Assert.assertEquals(18, file.getNumberOfLeapSeconds());
789
790
791 Assert.assertEquals(0, file.getGalileoNavigationMessages().size());
792 Assert.assertEquals(0, file.getQZSSNavigationMessages().size());
793 Assert.assertEquals(0, file.getBeidouNavigationMessages().size());
794 Assert.assertEquals(2, file.getIRNSSNavigationMessages().size());
795 Assert.assertEquals(0, file.getGlonassNavigationMessages().size());
796 Assert.assertEquals(0, file.getSBASNavigationMessages().size());
797 Assert.assertEquals(0, file.getGPSNavigationMessages().size());
798
799 final IRNSSNavigationMessage irnss = file.getIRNSSNavigationMessages("I05").get(0);
800 Assert.assertEquals(0.0, irnss.getEpochToc().durationFrom(new AbsoluteDate(2021, 3, 7, 0, 0, 0, TimeScalesFactory.getIRNSS())), Double.MIN_VALUE);
801 Assert.assertEquals(6.514852866530e-04, irnss.getAf0(), 1.0e-15);
802 Assert.assertEquals(-7.560174708487e-11, irnss.getAf1(), 1.0e-15);
803 Assert.assertEquals(0.000000000000e+00, irnss.getAf2(), 1.0e-15);
804 Assert.assertEquals(0, irnss.getIODEC());
805 Assert.assertEquals(-3.893125000000e+02, irnss.getCrs(), 1.0e-15);
806 Assert.assertEquals(-7.075087446362e-02, irnss.getM0(), 1.0e-15);
807 Assert.assertEquals(-1.282989978790e-05, irnss.getCuc(), 1.0e-15);
808 Assert.assertEquals(1.970665412955e-03, irnss.getE(), 1.0e-15);
809 Assert.assertEquals(1.581013202667e-05, irnss.getCus(), 1.0e-15);
810 Assert.assertEquals(6.493357162476e+03, FastMath.sqrt(irnss.getSma()), 1.0e-15);
811 Assert.assertEquals(0.000000000000e+00, irnss.getTime(), 1.0e-15);
812 Assert.assertEquals(-7.078051567078e-08, irnss.getCic(), 1.0e-15);
813 Assert.assertEquals(-1.270986014126e+00, irnss.getOmega0(), 1.0e-15);
814 Assert.assertEquals(2.160668373108e-07, irnss.getCis(), 1.0e-15);
815 Assert.assertEquals(5.051932936599e-01, irnss.getI0(), 1.0e-15);
816 Assert.assertEquals(-4.082500000000e+02, irnss.getCrc(), 1.0e-15);
817 Assert.assertEquals(-2.990028662993e+00, irnss.getPa(), 1.0e-15);
818 Assert.assertEquals(-2.734399613005e-09, irnss.getOmegaDot(), 1.0e-15);
819 Assert.assertEquals(6.389551864768e-10, irnss.getIDot(), 1.0e-15);
820 Assert.assertEquals(2148, irnss.getWeek());
821 Assert.assertEquals(4.000000000000e+00, irnss.getURA(), 1.0e-15);
822 Assert.assertEquals(0.000000000000e+00, irnss.getSvHealth(), 1.0e-15);
823 Assert.assertEquals(-4.656613000000e-10, irnss.getTGD(), 1.0e-15);
824
825 }
826
827 @Test
828 public void testBeidouRinex304() throws URISyntaxException, IOException {
829
830 final String ex = "/gnss/navigation/Example_Beidou_Rinex304.n";
831 final RinexNavigation file = new RinexNavigationParser().
832 parse(new DataSource(ex, () -> getClass().getResourceAsStream(ex)));
833
834
835 Assert.assertEquals(3.04, file.getFormatVersion(), Double.MIN_VALUE);
836 Assert.assertEquals("N", file.getFileType());
837 Assert.assertEquals(SatelliteSystem.BEIDOU, file.getSatelliteSystem());
838 Assert.assertEquals("JPS2RIN v.2.0.191", file.getProgramName());
839 Assert.assertEquals("JAVAD GNSS", file.getAgencyName());
840 Assert.assertEquals("20210224", file.getCreationDateString());
841 Assert.assertEquals("000715", file.getCreationTimeString());
842 Assert.assertEquals("UTC", file.getCreationTimeZoneString());
843 Assert.assertEquals(18, file.getNumberOfLeapSeconds());
844
845
846 Assert.assertEquals(0, file.getGalileoNavigationMessages().size());
847 Assert.assertEquals(0, file.getQZSSNavigationMessages().size());
848 Assert.assertEquals(1, file.getBeidouNavigationMessages().size());
849 Assert.assertEquals(0, file.getIRNSSNavigationMessages().size());
850 Assert.assertEquals(0, file.getGlonassNavigationMessages().size());
851 Assert.assertEquals(0, file.getSBASNavigationMessages().size());
852 Assert.assertEquals(0, file.getGPSNavigationMessages().size());
853
854 final BeidouNavigationMessage bdt = file.getBeidouNavigationMessages("C19").get(0);
855 Assert.assertEquals(0.0, bdt.getEpochToc().durationFrom(new AbsoluteDate(2021, 2, 23, 0, 0, 0, TimeScalesFactory.getBDT())), Double.MIN_VALUE);
856 Assert.assertEquals(7.378066657111e-04, bdt.getAf0(), 1.0e-15);
857 Assert.assertEquals(1.382893799473e-11, bdt.getAf1(), 1.0e-15);
858 Assert.assertEquals(0.000000000000e+00, bdt.getAf2(), 1.0e-15);
859 Assert.assertEquals(1, bdt.getAODE());
860 Assert.assertEquals(0, bdt.getAODC());
861 Assert.assertEquals(-7.420312500000e+01, bdt.getCrs(), 1.0e-15);
862 Assert.assertEquals(-2.379681558032e-01, bdt.getM0(), 1.0e-15);
863 Assert.assertEquals(-3.555789589882e-06, bdt.getCuc(), 1.0e-15);
864 Assert.assertEquals(8.384847315028e-04, bdt.getE(), 1.0e-15);
865 Assert.assertEquals(1.072138547897e-05, bdt.getCus(), 1.0e-15);
866 Assert.assertEquals(5.282626970291e+03, FastMath.sqrt(bdt.getSma()), 1.0e-15);
867 Assert.assertEquals(1.728000000000e+05, bdt.getTime(), 1.0e-15);
868 Assert.assertEquals(-2.607703208923e-08, bdt.getCic(), 1.0e-15);
869 Assert.assertEquals(-4.071039898353e-01, bdt.getOmega0(), 1.0e-15);
870 Assert.assertEquals(-6.519258022308e-09, bdt.getCis(), 1.0e-15);
871 Assert.assertEquals(9.657351895813e-01, bdt.getI0(), 1.0e-15);
872 Assert.assertEquals(1.491093750000e+02, bdt.getCrc(), 1.0e-15);
873 Assert.assertEquals(-1.225716188251e+00, bdt.getPa(), 1.0e-15);
874 Assert.assertEquals(-6.454554572392e-09, bdt.getOmegaDot(), 1.0e-15);
875 Assert.assertEquals(2.217949529358e-10, bdt.getIDot(), 1.0e-15);
876 Assert.assertEquals(790, bdt.getWeek());
877 Assert.assertEquals(2.000000000000e+00, bdt.getSvAccuracy(), 1.0e-15);
878 Assert.assertEquals(1.220000000000e-08, bdt.getTGD1(), 1.0e-15);
879 Assert.assertEquals(1.220000000000e-08, bdt.getTGD2(), 1.0e-15);
880
881 }
882
883 @Test
884 public void testUnknownHeaderKey() throws IOException {
885 try {
886 final String ex = "/gnss/navigation/unknown-key-header.n";
887 new RinexNavigationParser().
888 parse(new DataSource(ex, () -> getClass().getResourceAsStream(ex)));
889 Assert.fail("an exception should have been thrown");
890 } catch (OrekitException oe) {
891 Assert.assertEquals(OrekitMessages.UNABLE_TO_PARSE_LINE_IN_FILE,
892 oe.getSpecifier());
893 Assert.assertEquals(4, oe.getParts()[0]);
894 }
895 }
896
897 @Test
898 public void testUnknownRinexVersion() throws IOException {
899 try {
900 final String ex = "/gnss/navigation/unknown-rinex-version.n";
901 new RinexNavigationParser().
902 parse(new DataSource(ex, () -> getClass().getResourceAsStream(ex)));
903 Assert.fail("an exception should have been thrown");
904 } catch (OrekitException oe) {
905 Assert.assertEquals(OrekitMessages.NAVIGATION_FILE_UNSUPPORTED_VERSION,
906 oe.getSpecifier());
907 Assert.assertEquals(9.99, oe.getParts()[0]);
908 }
909 }
910
911 @Test
912 public void testWrongFormat() throws IOException {
913 try {
914 final String ex = "/gnss/navigation/wrong-format.n";
915 new RinexNavigationParser().
916 parse(new DataSource(ex, () -> getClass().getResourceAsStream(ex)));
917 Assert.fail("an exception should have been thrown");
918 } catch (OrekitException oe) {
919 Assert.assertEquals(OrekitMessages.UNABLE_TO_PARSE_LINE_IN_FILE,
920 oe.getSpecifier());
921 Assert.assertEquals(4, oe.getParts()[0]);
922 }
923 }
924
925 }