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.errors.OrekitException;
20 import org.orekit.errors.OrekitMessages;
21 import org.orekit.files.rinex.navigation.RinexNavigation;
22 import org.orekit.files.rinex.navigation.RinexNavigationParser;
23 import org.orekit.files.rinex.navigation.parsers.ParseInfo;
24 import org.orekit.propagation.analytical.gnss.data.BeidouCivilianNavigationMessage;
25 import org.orekit.propagation.analytical.gnss.data.BeidouCivilianNavigationMessageFactory;
26 import org.orekit.propagation.analytical.gnss.data.BeidouCivilianType;
27 import org.orekit.propagation.analytical.gnss.data.BeidouSatelliteType;
28 import org.orekit.time.GNSSDate;
29 import org.orekit.utils.units.Unit;
30
31
32
33
34
35
36 public class BeidouCnv123Parser
37 extends AbstractNavigationParser<BeidouCivilianNavigationMessage, BeidouCivilianNavigationMessageFactory> {
38
39
40
41
42
43 public BeidouCnv123Parser(final ParseInfo parseInfo, final BeidouCivilianNavigationMessageFactory factory) {
44 super(parseInfo, factory);
45 }
46
47
48 @Override
49 public void parseLine00() {
50 final ParseInfo parseInfo = getParseInfo();
51 final BeidouCivilianNavigationMessageFactory factory = getFactory();
52 parseSvEpochSvClockLine(parseInfo.getTimeScales().getBDT(), parseInfo, factory);
53 }
54
55
56 @Override
57 public void parseLine01() {
58 super.parseLine01();
59 final BeidouCivilianNavigationMessageFactory factory = getFactory();
60 factory.getADotDriver().setValue(getParseInfo().parseDouble1(RinexNavigationParser.M_PER_S));
61 }
62
63
64 @Override
65 public void parseLine05() {
66 final ParseInfo parseInfo = getParseInfo();
67 final BeidouCivilianNavigationMessageFactory factory = getFactory();
68 factory.getIDotDriver().setValue(parseInfo.parseDouble1(RinexNavigationParser.RAD_PER_S));
69 factory.getDeltaN0DotDriver().setValue(parseInfo.parseDouble2(RinexNavigationParser.RAD_PER_S2));
70 try {
71 factory.setSatelliteType(BeidouSatelliteType.parseSatelliteType(parseInfo.parseInt3()));
72 } catch (IllegalArgumentException iae) {
73 throw new OrekitException(OrekitMessages.UNABLE_TO_PARSE_LINE_IN_FILE,
74 parseInfo.getLineNumber(), parseInfo.getName(),
75 parseInfo.getLine());
76 }
77 factory.getTimeDriver().setValue(parseInfo.parseDouble4(Unit.SECOND));
78 }
79
80
81 @Override
82 public void parseLine06() {
83 final ParseInfo parseInfo = getParseInfo();
84 final BeidouCivilianNavigationMessageFactory factory = getFactory();
85 factory.setSisaiOe(parseInfo.parseInt1());
86 factory.setSisaiOcb(parseInfo.parseInt2());
87 factory.setSisaiOc1(parseInfo.parseInt3());
88 factory.setSisaiOc2(parseInfo.parseInt4());
89 }
90
91
92 @Override
93 public void parseLine07() {
94 final ParseInfo parseInfo = getParseInfo();
95 final BeidouCivilianNavigationMessageFactory factory = getFactory();
96 if (factory.getBeidouType() == BeidouCivilianType.CNV1) {
97 factory.setIscB1CD(parseInfo.parseDouble1(Unit.SECOND));
98
99 factory.setTgdB1Cp(parseInfo.parseDouble3(Unit.SECOND));
100 factory.setTgdB2ap(parseInfo.parseDouble4(Unit.SECOND));
101 } else if (factory.getBeidouType() == BeidouCivilianType.CNV2) {
102
103 factory.setIscB2AD(parseInfo.parseDouble2(Unit.SECOND));
104 factory.setTgdB1Cp(parseInfo.parseDouble3(Unit.SECOND));
105 factory.setTgdB2ap(parseInfo.parseDouble4(Unit.SECOND));
106 } else {
107 parseSismaiHealthIntegrity();
108 }
109 }
110
111
112 @Override
113 public void parseLine08() {
114 final ParseInfo parseInfo = getParseInfo();
115 final BeidouCivilianNavigationMessageFactory factory = getFactory();
116 if (factory.getBeidouType() == BeidouCivilianType.CNV3) {
117 factory.setTransmissionTime(new GNSSDate(factory.getTimeOfEphemeris().getWeekNumber(),
118 parseInfo.parseDouble1(Unit.SECOND),
119 factory.getSystem()));
120 parseInfo.closePendingRecord();
121 } else {
122 parseSismaiHealthIntegrity();
123 }
124 }
125
126
127 @Override
128 public void parseLine09() {
129 final ParseInfo parseInfo = getParseInfo();
130 final BeidouCivilianNavigationMessageFactory factory = getFactory();
131 factory.setTransmissionTime(new GNSSDate(factory.getTimeOfEphemeris().getWeekNumber(),
132 parseInfo.parseDouble1(Unit.SECOND),
133 factory.getSystem()));
134
135
136 factory.setIode(parseInfo.parseInt4());
137 parseInfo.closePendingRecord();
138 }
139
140
141 @Override
142 public void closeRecord(final RinexNavigation file) {
143 file.addBeidouCivilianNavigationMessage(getMessage());
144 }
145
146
147
148
149 private void parseSismaiHealthIntegrity() {
150 final ParseInfo parseInfo = getParseInfo();
151 final BeidouCivilianNavigationMessageFactory factory = getFactory();
152 factory.setSismai(parseInfo.parseInt1());
153 factory.setHealth(parseInfo.parseInt2());
154 factory.setIntegrityFlags(parseInfo.parseInt3());
155 factory.setIodc(parseInfo.parseInt4());
156 }
157
158 }