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.orekit.files.rinex.navigation.RinexNavigationParser;
20 import org.orekit.files.rinex.navigation.parsers.ParseInfo;
21 import org.orekit.files.rinex.navigation.parsers.RecordLineParser;
22 import org.orekit.propagation.analytical.gnss.data.AbstractNavigationMessage;
23 import org.orekit.propagation.analytical.gnss.data.AbstractNavigationMessageFactory;
24 import org.orekit.propagation.analytical.gnss.data.GNSSOrbitalElementsFactory;
25 import org.orekit.time.GNSSDate;
26 import org.orekit.utils.units.Unit;
27
28
29
30
31
32
33
34
35 public abstract class AbstractNavigationParser<T extends AbstractNavigationMessage<T>,
36 F extends AbstractNavigationMessageFactory<T>>
37 extends RecordLineParser {
38
39
40 private final ParseInfo parseInfo;
41
42
43 private final F factory;
44
45
46
47
48
49 protected AbstractNavigationParser(final ParseInfo parseInfo, final F factory) {
50 this.parseInfo = parseInfo;
51 this.factory = factory;
52 }
53
54
55
56
57 protected F getFactory() {
58 return factory;
59 }
60
61
62
63
64 public ParseInfo getParseInfo() {
65 return parseInfo;
66 }
67
68
69
70
71 public T getMessage() {
72 return factory.createFromDrivers();
73 }
74
75
76 @Override
77 public void parseLine00() {
78 if (parseInfo.getHeader().getFormatVersion() < 3.0) {
79 parseSvEpochSvClockLineRinex2(parseInfo.getLine(), parseInfo.getTimeScales().getGPS(), factory);
80 } else {
81 parseSvEpochSvClockLine(parseInfo.getTimeScales().getGPS(), parseInfo, factory);
82 }
83 }
84
85
86 @Override
87 public void parseLine01() {
88 factory.getCrsDriver().setValue(parseInfo.parseDouble2(Unit.METRE));
89 factory.getDeltaN0Driver().setValue(parseInfo.parseDouble3(RinexNavigationParser.RAD_PER_S));
90 factory.
91 getOrbitalParametersDrivers().
92 findByName(GNSSOrbitalElementsFactory.MEAN_ANOMALY).
93 setValue(parseInfo.parseDouble4(Unit.RADIAN));
94 }
95
96
97 @Override
98 public void parseLine02() {
99 factory.getCucDriver().setValue(parseInfo.parseDouble1(Unit.RADIAN));
100 factory.
101 getOrbitalParametersDrivers().
102 findByName(GNSSOrbitalElementsFactory.ECCENTRICITY).
103 setValue(parseInfo.parseDouble2(Unit.NONE));
104 factory.getCusDriver().setValue(parseInfo.parseDouble3(Unit.RADIAN));
105 final double sqrtA = parseInfo.parseDouble4(RinexNavigationParser.SQRT_M);
106 factory.
107 getOrbitalParametersDrivers().
108 findByName(GNSSOrbitalElementsFactory.SEMI_MAJOR_AXIS).
109 setValue(sqrtA * sqrtA);
110 }
111
112
113 @Override
114 public void parseLine03() {
115 factory.getTimeDriver().setValue(parseInfo.parseDouble1(Unit.SECOND));
116 factory.getCicDriver().setValue(parseInfo.parseDouble2(Unit.RADIAN));
117 factory.
118 getOrbitalParametersDrivers().
119 findByName(GNSSOrbitalElementsFactory.NODE_LONGITUDE).
120 setValue(parseInfo.parseDouble3(Unit.RADIAN));
121 factory.getCisDriver().setValue(parseInfo.parseDouble4(Unit.RADIAN));
122 }
123
124
125 @Override
126 public void parseLine04() {
127 factory.
128 getOrbitalParametersDrivers().
129 findByName(GNSSOrbitalElementsFactory.INCLINATION).
130 setValue(parseInfo.parseDouble1(Unit.RADIAN));
131 factory.getCrcDriver().setValue(parseInfo.parseDouble2(Unit.METRE));
132 factory.
133 getOrbitalParametersDrivers().
134 findByName(GNSSOrbitalElementsFactory.ARGUMENT_OF_PERIAPSIS).
135 setValue(parseInfo.parseDouble3(Unit.RADIAN));
136 factory.getOmegaDotDriver().setValue(parseInfo.parseDouble4(RinexNavigationParser.RAD_PER_S));
137 }
138
139
140 @Override
141 public void parseLine05() {
142 factory.getIDotDriver().setValue(parseInfo.parseDouble1(RinexNavigationParser.RAD_PER_S));
143 factory.setTimeOfEphemeris(new GNSSDate(parseInfo.parseInt3(), factory.getTimeDriver().getValue(),
144 factory.getSystem()));
145 }
146
147 }