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.utils.units.Unit;
24
25
26
27
28
29
30
31 public abstract class AbstractNavigationParser<T extends AbstractNavigationMessage<T>> extends RecordLineParser {
32
33
34 private final ParseInfo parseInfo;
35
36
37 private final T message;
38
39
40
41
42
43 protected AbstractNavigationParser(final ParseInfo parseInfo, final T message) {
44 this.parseInfo = parseInfo;
45 this.message = message;
46 }
47
48
49
50
51 public ParseInfo getParseInfo() {
52 return parseInfo;
53 }
54
55
56
57
58 public T getMessage() {
59 return message;
60 }
61
62
63 @Override
64 public void parseLine00() {
65 if (parseInfo.getHeader().getFormatVersion() < 3.0) {
66 parseSvEpochSvClockLineRinex2(parseInfo.getLine(), parseInfo.getTimeScales().getGPS(), message);
67 } else {
68 parseSvEpochSvClockLine(parseInfo.getTimeScales().getGPS(), parseInfo, message);
69 }
70 }
71
72
73 @Override
74 public void parseLine01() {
75 message.setCrs(parseInfo.parseDouble2(Unit.METRE));
76 message.setDeltaN0(parseInfo.parseDouble3(RinexNavigationParser.RAD_PER_S));
77 message.setM0(parseInfo.parseDouble4(Unit.RADIAN));
78 }
79
80
81 @Override
82 public void parseLine02() {
83 message.setCuc(parseInfo.parseDouble1(Unit.RADIAN));
84 message.setE(parseInfo.parseDouble2(Unit.NONE));
85 message.setCus(parseInfo.parseDouble3(Unit.RADIAN));
86 message.setSqrtA(parseInfo.parseDouble4(RinexNavigationParser.SQRT_M));
87 }
88
89
90 @Override
91 public void parseLine03() {
92 message.setTime(parseInfo.parseDouble1(Unit.SECOND));
93 message.setCic(parseInfo.parseDouble2(Unit.RADIAN));
94 message.setOmega0(parseInfo.parseDouble3(Unit.RADIAN));
95 message.setCis(parseInfo.parseDouble4(Unit.RADIAN));
96 }
97
98
99 @Override
100 public void parseLine04() {
101 message.setI0(parseInfo.parseDouble1(Unit.RADIAN));
102 message.setCrc(parseInfo.parseDouble2(Unit.METRE));
103 message.setPa(parseInfo.parseDouble3(Unit.RADIAN));
104 message.setOmegaDot(parseInfo.parseDouble4(RinexNavigationParser.RAD_PER_S));
105 }
106
107
108 @Override
109 public void parseLine05() {
110 message.setIDot(parseInfo.parseDouble1(RinexNavigationParser.RAD_PER_S));
111 message.setWeek(parseInfo.parseInt3());
112 }
113
114 }