1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.files.rinex.navigation.parsers.ephemeris;
18
19 import org.hipparchus.util.FastMath;
20 import org.orekit.files.rinex.navigation.RinexNavigation;
21 import org.orekit.files.rinex.navigation.parsers.ParseInfo;
22 import org.orekit.propagation.analytical.gnss.data.NavICLegacyNavigationMessage;
23 import org.orekit.propagation.analytical.gnss.data.NavICLegacyNavigationMessageFactory;
24 import org.orekit.time.GNSSDate;
25 import org.orekit.utils.units.Unit;
26
27
28
29
30
31
32 public class NavICLnavParser
33 extends LegacyNavigationParser<NavICLegacyNavigationMessage, NavICLegacyNavigationMessageFactory> {
34
35
36
37 static final double[] NAVIC_URA = {
38 2.40, 3.40, 4.85, 6.85,
39 9.65, 13.65, 24.00, 48.00,
40 96.00, 192.00, 384.00, 768.00,
41 1536.00, 3072.00, 6144.00, Double.NaN
42 };
43
44
45
46
47
48
49 public NavICLnavParser(final ParseInfo parseInfo, final NavICLegacyNavigationMessageFactory factory) {
50 super(parseInfo, factory);
51 }
52
53
54 @Override
55 public void parseLine00() {
56 final ParseInfo parseInfo = getParseInfo();
57 parseSvEpochSvClockLine(parseInfo.getTimeScales().getNavIC(), parseInfo, getFactory());
58 }
59
60
61 @Override
62 public void parseLine01() {
63 super.parseLine01();
64
65 final NavICLegacyNavigationMessageFactory factory = getFactory();
66 factory.setIodc(factory.getIode());
67 }
68
69
70 @Override
71 public void parseLine06() {
72 super.parseLine06();
73
74
75
76 final NavICLegacyNavigationMessageFactory factory = getFactory();
77 final int index = (int) FastMath.rint(factory.getSvAccuracy());
78 factory.setSvAccuracy(NAVIC_URA[FastMath.min(index, NAVIC_URA.length - 1)]);
79
80 }
81
82
83 @Override
84 public void parseLine07() {
85 final ParseInfo parseInfo = getParseInfo();
86 final NavICLegacyNavigationMessageFactory factory = getFactory();
87 factory.setTransmissionTime(new GNSSDate(factory.getTimeOfEphemeris().getWeekNumber(),
88 parseInfo.parseDouble1(Unit.SECOND),
89 factory.getSystem()));
90
91 parseInfo.closePendingRecord();
92 }
93
94
95 @Override
96 public void closeRecord(final RinexNavigation file) {
97 file.addNavICLegacyNavigationMessage(getMessage());
98 }
99
100 }