source: ntrip/branches/BNC_2.12/src/upload/bncrtnetuploadcaster.cpp@ 8152

Last change on this file since 8152 was 8146, checked in by stuerze, 7 years ago

bug fixed regarding crd trafo: trafo from ITRF2014 into ETRF2008, NAD83 or DREF91 is done via ITRF2008

File size: 99.9 KB
Line 
1/* -------------------------------------------------------------------------
2 * BKG NTRIP Server
3 * -------------------------------------------------------------------------
4 *
5 * Class: bncRtnetUploadCaster
6 *
7 * Purpose: Connection to NTRIP Caster
8 *
9 * Author: L. Mervart
10 *
11 * Created: 29-Mar-2011
12 *
13 * Changes:
14 *
15 * -----------------------------------------------------------------------*/
16
17#include <math.h>
18#include "bncrtnetuploadcaster.h"
19#include "bncsettings.h"
20#include "bncephuser.h"
21#include "bncclockrinex.h"
22#include "bncsp3.h"
23#include "gnss.h"
24
25using namespace std;
26
27// Constructor
28////////////////////////////////////////////////////////////////////////////
29bncRtnetUploadCaster::bncRtnetUploadCaster(const QString& mountpoint,
30 const QString& outHost, int outPort, const QString& password,
31 const QString& crdTrafo, bool CoM, const QString& sp3FileName,
32 const QString& rnxFileName, int PID, int SID, int IOD, int iRow) :
33 bncUploadCaster(mountpoint, outHost, outPort, password, iRow, 0) {
34
35 if (!outHost.isEmpty()) {
36 _casterID += outHost;
37 }
38 if (!crdTrafo.isEmpty()) {
39 _casterID += " " + crdTrafo;
40 }
41 if (!sp3FileName.isEmpty()) {
42 _casterID += " " + sp3FileName;
43 }
44 if (!rnxFileName.isEmpty()) {
45 _casterID += " " + rnxFileName;
46 }
47
48 _crdTrafo = crdTrafo;
49 _CoM = CoM;
50 _PID = PID;
51 _SID = SID;
52 _IOD = IOD;
53
54 // Member that receives the ephemeris
55 // ----------------------------------
56 _ephUser = new bncEphUser(true);
57
58 bncSettings settings;
59 QString intr = settings.value("uploadIntr").toString();
60 QStringList hlp = settings.value("cmbStreams").toStringList();
61 _samplRtcmEphCorr = settings.value("uploadSamplRtcmEphCorr").toDouble();
62 if (hlp.size() > 1) { // combination stream upload
63 _samplRtcmClkCorr = settings.value("cmbSampl").toInt();
64 }
65 else { // single stream upload or sp3 file generation
66 _samplRtcmClkCorr = 5; // default
67 }
68 int samplClkRnx = settings.value("uploadSamplClkRnx").toInt();
69 int samplSp3 = settings.value("uploadSamplSp3").toInt() * 60;
70
71 if (_samplRtcmEphCorr == 0.0) {
72 _usedEph = 0;
73 }
74 else {
75 _usedEph = new QMap<QString, const t_eph*>;
76 }
77
78 // RINEX writer
79 // ------------
80 if (!rnxFileName.isEmpty()) {
81 _rnx = new bncClockRinex(rnxFileName, intr, samplClkRnx);
82 }
83 else {
84 _rnx = 0;
85 }
86
87 // SP3 writer
88 // ----------
89 if (!sp3FileName.isEmpty()) {
90 _sp3 = new bncSP3(sp3FileName, intr, samplSp3);
91 }
92 else {
93 _sp3 = 0;
94 }
95
96 // Set Transformation Parameters
97 // -----------------------------
98 // Transformation Parameters from ITRF2008 to ETRF2000
99 if (_crdTrafo == "ETRF2000") {
100 _dx = 0.0521;
101 _dy = 0.0493;
102 _dz = -0.0585;
103 _dxr = 0.0001;
104 _dyr = 0.0001;
105 _dzr = -0.0018;
106 _ox = 0.000891;
107 _oy = 0.005390;
108 _oz = -0.008712;
109 _oxr = 0.000081;
110 _oyr = 0.000490;
111 _ozr = -0.000792;
112 _sc = 1.34;
113 _scr = 0.08;
114 _t0 = 2000.0;
115 }
116 // Transformation Parameters from ITRF2008 to NAD83
117 else if (_crdTrafo == "NAD83") {
118 _dx = 0.99343;
119 _dy = -1.90331;
120 _dz = -0.52655;
121 _dxr = 0.00079;
122 _dyr = -0.00060;
123 _dzr = -0.00134;
124 _ox = -0.02591467;
125 _oy = -0.00942645;
126 _oz = -0.01159935;
127 _oxr = -0.00006667;
128 _oyr = 0.00075744;
129 _ozr = 0.00005133;
130 _sc = 1.71504;
131 _scr = -0.10201;
132 _t0 = 1997.0;
133 }
134 // Transformation Parameters from ITRF2014 to GDA2020 (Ryan Ruddick, GA)
135 else if (_crdTrafo == "GDA2020") {
136 _dx = 0.0;
137 _dy = 0.0;
138 _dz = 0.0;
139 _dxr = 0.0;
140 _dyr = 0.0;
141 _dzr = 0.0;
142 _ox = 0.0;
143 _oy = 0.0;
144 _oz = 0.0;
145 _oxr = 0.00150379;
146 _oyr = 0.00118346;
147 _ozr = 0.00120716;
148 _sc = 0.0;
149 _scr = 0.0;
150 _t0 = 2020.0;
151 }
152 // Transformation Parameters from IGb14 to SIRGAS2000 (Sonia Costa, BRA)
153 else if (_crdTrafo == "SIRGAS2000") {
154 _dx = 0.0026;
155 _dy = 0.0018;
156 _dz = -0.0061;
157 _dxr = 0.0000;
158 _dyr = 0.0000;
159 _dzr = 0.0000;
160 _ox = 0.000170;
161 _oy = -0.000030;
162 _oz = 0.000070;
163 _oxr = 0.000000;
164 _oyr = 0.000000;
165 _ozr = 0.000000;
166 _sc = -1.000;
167 _scr = 0.000;
168 _t0 = 2000.4;
169 }
170 // Transformation Parameters from ITRF2008 to DREF91
171 else if (_crdTrafo == "DREF91") {
172 _dx = -0.0118;
173 _dy = 0.1432;
174 _dz = -0.1117;
175 _dxr = 0.0001;
176 _dyr = 0.0001;
177 _dzr = -0.0018;
178 _ox = 0.003291;
179 _oy = 0.006190;
180 _oz = -0.011012;
181 _oxr = 0.000081;
182 _oyr = 0.000490;
183 _ozr = -0.000792;
184 _sc = 12.24;
185 _scr = 0.08;
186 _t0 = 2000.0;
187 }
188 else if (_crdTrafo == "Custom") {
189 _dx = settings.value("trafo_dx").toDouble();
190 _dy = settings.value("trafo_dy").toDouble();
191 _dz = settings.value("trafo_dz").toDouble();
192 _dxr = settings.value("trafo_dxr").toDouble();
193 _dyr = settings.value("trafo_dyr").toDouble();
194 _dzr = settings.value("trafo_dzr").toDouble();
195 _ox = settings.value("trafo_ox").toDouble();
196 _oy = settings.value("trafo_oy").toDouble();
197 _oz = settings.value("trafo_oz").toDouble();
198 _oxr = settings.value("trafo_oxr").toDouble();
199 _oyr = settings.value("trafo_oyr").toDouble();
200 _ozr = settings.value("trafo_ozr").toDouble();
201 _sc = settings.value("trafo_sc").toDouble();
202 _scr = settings.value("trafo_scr").toDouble();
203 _t0 = settings.value("trafo_t0").toDouble();
204 }
205 // TODO: the following lines can be deleted if all parameters are updated regarding ITRF2014
206 if (_crdTrafo == "ETRF2000" ||
207 _crdTrafo == "NAD83" ||
208 _crdTrafo == "DREF91" ) {// Transformation Parameters from ITRF2014 to ITRF2008
209 // (http://itrf.ign.fr/doc_ITRF/Transfo-ITRF2014_ITRFs.txt)
210 _dx8 = 0.0016;
211 _dy8 = 0.0019;
212 _dz8 = 0.0024;
213 _dxr8 = 0.0;
214 _dyr8 = 0.0;
215 _dzr8 = -0.0001;
216 _ox8 = 0.0;
217 _oy8 = 0.0;
218 _oz8 = 0.0;
219 _oxr8 = 0.0;
220 _oyr8 = 0.0;
221 _ozr8 = 0.0;
222 _sc8 = -0.02;
223 _scr8 = 0.03;
224 _t08 = 2010.0;
225 }
226}
227
228// Destructor
229////////////////////////////////////////////////////////////////////////////
230bncRtnetUploadCaster::~bncRtnetUploadCaster() {
231 if (isRunning()) {
232 wait();
233 }
234 delete _rnx;
235 delete _sp3;
236 delete _ephUser;
237 delete _usedEph;
238}
239
240//
241////////////////////////////////////////////////////////////////////////////
242void bncRtnetUploadCaster::decodeRtnetStream(char* buffer, int bufLen) {
243
244 QMutexLocker locker(&_mutex);
245
246 // Append to internal buffer
247 // -------------------------
248 _rtnetStreamBuffer.append(QByteArray(buffer, bufLen));
249
250 // Select buffer part that contains last epoch
251 // -------------------------------------------
252 QStringList lines;
253 int iEpoBeg = _rtnetStreamBuffer.lastIndexOf('*'); // begin of last epoch
254 if (iEpoBeg == -1) {
255 _rtnetStreamBuffer.clear();
256 return;
257 }
258 int iEpoBegEarlier = _rtnetStreamBuffer.indexOf('*');
259 if (iEpoBegEarlier != -1 && iEpoBegEarlier < iEpoBeg) { // are there two epoch lines in buffer?
260 _rtnetStreamBuffer = _rtnetStreamBuffer.mid(iEpoBegEarlier);
261 }
262 else {
263 _rtnetStreamBuffer = _rtnetStreamBuffer.mid(iEpoBeg);
264 }
265
266 int iEpoEnd = _rtnetStreamBuffer.lastIndexOf("EOE"); // end of last epoch
267 if (iEpoEnd == -1) {
268 return;
269 }
270 else {
271 lines = _rtnetStreamBuffer.left(iEpoEnd).split('\n',
272 QString::SkipEmptyParts);
273 _rtnetStreamBuffer = _rtnetStreamBuffer.mid(iEpoEnd + 3);
274 }
275
276 if (lines.size() < 2) {
277 return;
278 }
279
280 // Read first line (with epoch time)
281 // ---------------------------------
282 QTextStream in(lines[0].toAscii());
283 QString hlp;
284 int year, month, day, hour, min;
285 double sec;
286 in >> hlp >> year >> month >> day >> hour >> min >> sec;
287 bncTime epoTime;
288 epoTime.set(year, month, day, hour, min, sec);
289
290 emit(newMessage(
291 "bncRtnetUploadCaster: decode " + QByteArray(epoTime.datestr().c_str())
292 + " " + QByteArray(epoTime.timestr().c_str()) + " "
293 + _casterID.toAscii(), false));
294
295 struct ClockOrbit co;
296 memset(&co, 0, sizeof(co));
297 co.EpochTime[CLOCKORBIT_SATGPS] = static_cast<int>(epoTime.gpssec());
298 double gt = epoTime.gpssec() + 3 * 3600 - gnumleap(year, month, day);
299 co.EpochTime[CLOCKORBIT_SATGLONASS] = static_cast<int>(fmod(gt, 86400.0));
300 co.EpochTime[CLOCKORBIT_SATGALILEO] = static_cast<int>(epoTime.gpssec());
301 co.EpochTime[CLOCKORBIT_SATQZSS] = static_cast<int>(epoTime.gpssec());
302 co.EpochTime[CLOCKORBIT_SATSBAS] = static_cast<int>(epoTime.gpssec());
303 co.EpochTime[CLOCKORBIT_SATBDS] = static_cast<int>(epoTime.bdssec());
304 co.Supplied[COBOFS_CLOCK] = 1;
305 co.Supplied[COBOFS_ORBIT] = 1;
306 co.SatRefDatum = DATUM_ITRF;
307 co.SSRIOD = _IOD;
308 co.SSRProviderID = _PID; // 256 .. BKG, 257 ... EUREF
309 co.SSRSolutionID = _SID;
310
311 struct CodeBias bias;
312 memset(&bias, 0, sizeof(bias));
313 bias.EpochTime[CLOCKORBIT_SATGPS] = co.EpochTime[CLOCKORBIT_SATGPS];
314 bias.EpochTime[CLOCKORBIT_SATGLONASS] = co.EpochTime[CLOCKORBIT_SATGLONASS];
315 bias.EpochTime[CLOCKORBIT_SATGALILEO] = co.EpochTime[CLOCKORBIT_SATGALILEO];
316 bias.EpochTime[CLOCKORBIT_SATQZSS] = co.EpochTime[CLOCKORBIT_SATQZSS];
317 bias.EpochTime[CLOCKORBIT_SATSBAS] = co.EpochTime[CLOCKORBIT_SATSBAS];
318 bias.EpochTime[CLOCKORBIT_SATBDS] = co.EpochTime[CLOCKORBIT_SATBDS];
319 bias.SSRIOD = _IOD;
320 bias.SSRProviderID = _PID;
321 bias.SSRSolutionID = _SID;
322
323 struct PhaseBias phasebias;
324 memset(&phasebias, 0, sizeof(phasebias));
325 unsigned int dispersiveBiasConsistenyIndicator = 0;
326 unsigned int mwConsistencyIndicator = 0;
327 phasebias.EpochTime[CLOCKORBIT_SATGPS] = co.EpochTime[CLOCKORBIT_SATGPS];
328 phasebias.EpochTime[CLOCKORBIT_SATGLONASS] = co.EpochTime[CLOCKORBIT_SATGLONASS];
329 phasebias.EpochTime[CLOCKORBIT_SATGALILEO] = co.EpochTime[CLOCKORBIT_SATGALILEO];
330 phasebias.EpochTime[CLOCKORBIT_SATQZSS] = co.EpochTime[CLOCKORBIT_SATQZSS];
331 phasebias.EpochTime[CLOCKORBIT_SATSBAS] = co.EpochTime[CLOCKORBIT_SATSBAS];
332 phasebias.EpochTime[CLOCKORBIT_SATBDS] = co.EpochTime[CLOCKORBIT_SATBDS];
333 phasebias.SSRIOD = _IOD;
334 phasebias.SSRProviderID = _PID;
335 phasebias.SSRSolutionID = _SID;
336
337 struct VTEC vtec;
338 memset(&vtec, 0, sizeof(vtec));
339 vtec.EpochTime = static_cast<int>(epoTime.gpssec());
340 vtec.SSRIOD = _IOD;
341 vtec.SSRProviderID = _PID;
342 vtec.SSRSolutionID = _SID;
343
344 // Default Update Interval
345 // -----------------------
346 int clkUpdInd = 2; // 5 sec
347 int ephUpdInd = clkUpdInd; // default
348
349 if (_samplRtcmClkCorr > 5.0 && _samplRtcmEphCorr <= 5.0) { // combined orb and clock
350 ephUpdInd = determineUpdateInd(_samplRtcmClkCorr);
351 }
352 if (_samplRtcmClkCorr > 5.0) {
353 clkUpdInd = determineUpdateInd(_samplRtcmClkCorr);
354 }
355 if (_samplRtcmEphCorr > 5.0) {
356 ephUpdInd = determineUpdateInd(_samplRtcmEphCorr);
357 }
358
359 co.UpdateInterval = clkUpdInd;
360 bias.UpdateInterval = clkUpdInd;
361 phasebias.UpdateInterval = clkUpdInd;
362
363 for (int ii = 1; ii < lines.size(); ii++) {
364 QString key; // prn or key VTEC, IND (phase bias indicators)
365 ColumnVector rtnAPC;
366 ColumnVector rtnVel;
367 ColumnVector rtnCoM;
368 double rtnClk;
369 t_prn prn;
370
371 QTextStream in(lines[ii].toAscii());
372
373 in >> key;
374
375 // non-satellite specific parameters
376 if (key.contains("IND", Qt::CaseSensitive)) {
377 in >> dispersiveBiasConsistenyIndicator >> mwConsistencyIndicator;
378 continue;
379 }
380 // non-satellite specific parameters
381 if (key.contains("VTEC", Qt::CaseSensitive)) {
382 double ui;
383 in >> ui >> vtec.NumLayers;
384 vtec.UpdateInterval = (unsigned int) determineUpdateInd(ui);
385 for (unsigned ll = 0; ll < vtec.NumLayers; ll++) {
386 int dummy;
387 in >> dummy >> vtec.Layers[ll].Degree >> vtec.Layers[ll].Order
388 >> vtec.Layers[ll].Height;
389 for (unsigned iDeg = 0; iDeg <= vtec.Layers[ll].Degree; iDeg++) {
390 for (unsigned iOrd = 0; iOrd <= vtec.Layers[ll].Order; iOrd++) {
391 in >> vtec.Layers[ll].Cosinus[iDeg][iOrd];
392 }
393 }
394 for (unsigned iDeg = 0; iDeg <= vtec.Layers[ll].Degree; iDeg++) {
395 for (unsigned iOrd = 0; iOrd <= vtec.Layers[ll].Order; iOrd++) {
396 in >> vtec.Layers[ll].Sinus[iDeg][iOrd];
397 }
398 }
399 }
400 continue;
401 }
402 // satellite specific parameters
403 char sys = key.mid(0, 1).at(0).toAscii();
404 int number = key.mid(1, 2).toInt();
405 int flags = 0;
406 if (sys == 'E') { // I/NAV
407 flags = 1;
408 }
409 prn.set(sys, number, flags);
410 QString prnInternalStr = QString::fromStdString(prn.toInternalString());
411 QString prnStr = QString::fromStdString(prn.toString());
412
413 const t_eph* ephLast = _ephUser->ephLast(prnInternalStr);
414 const t_eph* ephPrev = _ephUser->ephPrev(prnInternalStr);
415 const t_eph* eph = ephLast;
416 if (eph) {
417
418 // Use previous ephemeris if the last one is too recent
419 // ----------------------------------------------------
420 const int MINAGE = 60; // seconds
421 if (ephPrev && eph->receptDateTime().isValid()
422 && eph->receptDateTime().secsTo(currentDateAndTimeGPS()) < MINAGE) {
423 eph = ephPrev;
424 }
425
426 // Make sure the clock messages refer to same IOD as orbit messages
427 // ----------------------------------------------------------------
428 if (_usedEph) {
429 if (fmod(epoTime.gpssec(), _samplRtcmEphCorr) == 0.0) {
430 (*_usedEph)[prnInternalStr] = eph;
431 }
432 else {
433 eph = 0;
434 if (_usedEph->contains(prnInternalStr)) {
435 const t_eph* usedEph = _usedEph->value(prnInternalStr);
436 if (usedEph == ephLast) {
437 eph = ephLast;
438 }
439 else if (usedEph == ephPrev) {
440 eph = ephPrev;
441 }
442 }
443 }
444 }
445 }
446
447 if (eph) {
448
449 QMap<QString, double> codeBiases;
450 QList<phaseBiasSignal> phaseBiasList;
451 phaseBiasesSat pbSat;
452
453 while (true) {
454 QString key;
455 int numVal = 0;
456 in >> key;
457 if (in.status() != QTextStream::Ok) {
458 break;
459 }
460 if (key == "APC") {
461 in >> numVal;
462 rtnAPC.ReSize(3);
463 for (int ii = 0; ii < numVal; ii++) {
464 in >> rtnAPC[ii];
465 }
466 }
467 else if (key == "Clk") {
468 in >> numVal;
469 if (numVal == 1)
470 in >> rtnClk;
471 }
472 else if (key == "Vel") {
473 rtnVel.ReSize(3);
474 in >> numVal;
475 for (int ii = 0; ii < numVal; ii++) {
476 in >> rtnVel[ii];
477 }
478 }
479 else if (key == "CoM") {
480 rtnCoM.ReSize(3);
481 in >> numVal;
482 for (int ii = 0; ii < numVal; ii++) {
483 in >> rtnCoM[ii];
484 }
485 }
486 else if (key == "CodeBias") {
487 in >> numVal;
488 for (int ii = 0; ii < numVal; ii++) {
489 QString type;
490 double value;
491 in >> type >> value;
492 codeBiases[type] = value;
493 }
494 }
495 else if (key == "YawAngle") {
496 in >> numVal >> pbSat.yawAngle;
497 if (pbSat.yawAngle < 0.0) {
498 pbSat.yawAngle += (2*M_PI);
499 }
500 else if (pbSat.yawAngle > 2*M_PI) {
501 pbSat.yawAngle -= (2*M_PI);
502 }
503 }
504 else if (key == "YawRate") {
505 in >> numVal >> pbSat.yawRate;
506 }
507 else if (key == "PhaseBias") {
508 in >> numVal;
509 for (int ii = 0; ii < numVal; ii++) {
510 phaseBiasSignal pb;
511 in >> pb.type >> pb.bias >> pb.integerIndicator
512 >> pb.wlIndicator >> pb.discontinuityCounter;
513 phaseBiasList.append(pb);
514 }
515 }
516 else {
517 in >> numVal;
518 for (int ii = 0; ii < numVal; ii++) {
519 double dummy;
520 in >> dummy;
521 }
522 }
523 }
524
525 struct ClockOrbit::SatData* sd = 0;
526 if (prn.system() == 'G') {
527 sd = co.Sat + co.NumberOfSat[CLOCKORBIT_SATGPS];
528 ++co.NumberOfSat[CLOCKORBIT_SATGPS];
529 }
530 else if (prn.system() == 'R') {
531 sd = co.Sat + CLOCKORBIT_NUMGPS + co.NumberOfSat[CLOCKORBIT_SATGLONASS];
532 ++co.NumberOfSat[CLOCKORBIT_SATGLONASS];
533 }
534 else if (prn.system() == 'E') {
535 sd = co.Sat + CLOCKORBIT_NUMGPS + CLOCKORBIT_NUMGLONASS
536 + co.NumberOfSat[CLOCKORBIT_SATGALILEO];
537 ++co.NumberOfSat[CLOCKORBIT_SATGALILEO];
538 }
539 else if (prn.system() == 'J') {
540 sd = co.Sat + CLOCKORBIT_NUMGPS + CLOCKORBIT_NUMGLONASS
541 + CLOCKORBIT_NUMGALILEO + co.NumberOfSat[CLOCKORBIT_SATQZSS];
542 ++co.NumberOfSat[CLOCKORBIT_SATQZSS];
543 }
544 else if (prn.system() == 'S') {
545 sd = co.Sat + CLOCKORBIT_NUMGPS + CLOCKORBIT_NUMGLONASS
546 + CLOCKORBIT_NUMGALILEO + CLOCKORBIT_NUMQZSS
547 + co.NumberOfSat[CLOCKORBIT_SATSBAS];
548 ++co.NumberOfSat[CLOCKORBIT_SATSBAS];
549 }
550 else if (prn.system() == 'C') {
551 sd = co.Sat + CLOCKORBIT_NUMGPS + CLOCKORBIT_NUMGLONASS
552 + CLOCKORBIT_NUMGALILEO + CLOCKORBIT_NUMQZSS + CLOCKORBIT_NUMSBAS
553 + co.NumberOfSat[CLOCKORBIT_SATBDS];
554 ++co.NumberOfSat[CLOCKORBIT_SATBDS];
555 }
556 if (sd) {
557 QString outLine;
558 processSatellite(eph, epoTime.gpsw(), epoTime.gpssec(), prnStr, rtnAPC,
559 rtnClk, rtnVel, rtnCoM, sd, outLine);
560 }
561
562 // Code Biases
563 // -----------
564 struct CodeBias::BiasSat* biasSat = 0;
565 if (!codeBiases.isEmpty()) {
566 if (prn.system() == 'G') {
567 biasSat = bias.Sat + bias.NumberOfSat[CLOCKORBIT_SATGPS];
568 ++bias.NumberOfSat[CLOCKORBIT_SATGPS];
569 }
570 else if (prn.system() == 'R') {
571 biasSat = bias.Sat + CLOCKORBIT_NUMGPS
572 + bias.NumberOfSat[CLOCKORBIT_SATGLONASS];
573 ++bias.NumberOfSat[CLOCKORBIT_SATGLONASS];
574 }
575 else if (prn.system() == 'E') {
576 biasSat = bias.Sat + CLOCKORBIT_NUMGPS + CLOCKORBIT_NUMGLONASS
577 + bias.NumberOfSat[CLOCKORBIT_SATGALILEO];
578 ++bias.NumberOfSat[CLOCKORBIT_SATGALILEO];
579 }
580 else if (prn.system() == 'J') {
581 biasSat = bias.Sat + CLOCKORBIT_NUMGPS + CLOCKORBIT_NUMGLONASS
582 + CLOCKORBIT_NUMGALILEO + bias.NumberOfSat[CLOCKORBIT_SATQZSS];
583 ++bias.NumberOfSat[CLOCKORBIT_SATQZSS];
584 }
585 else if (prn.system() == 'S') {
586 biasSat = bias.Sat + CLOCKORBIT_NUMGPS + CLOCKORBIT_NUMGLONASS
587 + CLOCKORBIT_NUMGALILEO + CLOCKORBIT_NUMQZSS
588 + bias.NumberOfSat[CLOCKORBIT_SATSBAS];
589 ++bias.NumberOfSat[CLOCKORBIT_SATSBAS];
590 }
591 else if (prn.system() == 'C') {
592 biasSat = bias.Sat + CLOCKORBIT_NUMGPS + CLOCKORBIT_NUMGLONASS
593 + CLOCKORBIT_NUMGALILEO + CLOCKORBIT_NUMQZSS + CLOCKORBIT_NUMSBAS
594 + bias.NumberOfSat[CLOCKORBIT_SATBDS];
595 ++bias.NumberOfSat[CLOCKORBIT_SATBDS];
596 }
597 }
598
599 if (biasSat) {
600 biasSat->ID = prn.number();
601 biasSat->NumberOfCodeBiases = 0;
602 if (prn.system() == 'G') {
603 QMapIterator<QString, double> it(codeBiases);
604 while (it.hasNext()) {
605 it.next();
606 if (it.key() == "1C") {
607 int ii = biasSat->NumberOfCodeBiases;
608 if (ii >= CLOCKORBIT_NUMBIAS)
609 break;
610 biasSat->NumberOfCodeBiases += 1;
611 biasSat->Biases[ii].Type = CODETYPEGPS_L1_CA;
612 biasSat->Biases[ii].Bias = it.value();
613 }
614 else if (it.key() == "1S") {
615 int ii = biasSat->NumberOfCodeBiases;
616 if (ii >= CLOCKORBIT_NUMBIAS)
617 break;
618 biasSat->NumberOfCodeBiases += 1;
619 biasSat->Biases[ii].Type = CODETYPEGPS_L1C_D;
620 biasSat->Biases[ii].Bias = it.value();
621 }
622 else if (it.key() == "1L") {
623 int ii = biasSat->NumberOfCodeBiases;
624 if (ii >= CLOCKORBIT_NUMBIAS)
625 break;
626 biasSat->NumberOfCodeBiases += 1;
627 biasSat->Biases[ii].Type = CODETYPEGPS_L1C_P;
628 biasSat->Biases[ii].Bias = it.value();
629 }
630 else if (it.key() == "1X") {
631 int ii = biasSat->NumberOfCodeBiases;
632 if (ii >= CLOCKORBIT_NUMBIAS)
633 break;
634 biasSat->NumberOfCodeBiases += 1;
635 biasSat->Biases[ii].Type = CODETYPEGPS_L1C_DP;
636 biasSat->Biases[ii].Bias = it.value();
637 }
638 else if (it.key() == "1P") {
639 int ii = biasSat->NumberOfCodeBiases;
640 if (ii >= CLOCKORBIT_NUMBIAS)
641 break;
642 biasSat->NumberOfCodeBiases += 1;
643 biasSat->Biases[ii].Type = CODETYPEGPS_L1_P;
644 biasSat->Biases[ii].Bias = it.value();
645 }
646 else if (it.key() == "1W") {
647 int ii = biasSat->NumberOfCodeBiases;
648 if (ii >= CLOCKORBIT_NUMBIAS)
649 break;
650 biasSat->NumberOfCodeBiases += 1;
651 biasSat->Biases[ii].Type = CODETYPEGPS_L1_Z;
652 biasSat->Biases[ii].Bias = it.value();
653 }
654 else if (it.key() == "2C") {
655 int ii = biasSat->NumberOfCodeBiases;
656 if (ii >= CLOCKORBIT_NUMBIAS)
657 break;
658 biasSat->NumberOfCodeBiases += 1;
659 biasSat->Biases[ii].Type = CODETYPEGPS_L2_CA;
660 biasSat->Biases[ii].Bias = it.value();
661 }
662 else if (it.key() == "2D") {
663 int ii = biasSat->NumberOfCodeBiases;
664 if (ii >= CLOCKORBIT_NUMBIAS)
665 break;
666 biasSat->NumberOfCodeBiases += 1;
667 biasSat->Biases[ii].Type = CODETYPEGPS_SEMI_CODELESS;
668 biasSat->Biases[ii].Bias = it.value();
669 }
670 else if (it.key() == "2S") {
671 int ii = biasSat->NumberOfCodeBiases;
672 if (ii >= CLOCKORBIT_NUMBIAS)
673 break;
674 biasSat->NumberOfCodeBiases += 1;
675 biasSat->Biases[ii].Type = CODETYPEGPS_L2_CM;
676 biasSat->Biases[ii].Bias = it.value();
677 }
678 else if (it.key() == "2L") {
679 int ii = biasSat->NumberOfCodeBiases;
680 if (ii >= CLOCKORBIT_NUMBIAS)
681 break;
682 biasSat->NumberOfCodeBiases += 1;
683 biasSat->Biases[ii].Type = CODETYPEGPS_L2_CL;
684 biasSat->Biases[ii].Bias = it.value();
685 }
686 else if (it.key() == "2X") {
687 int ii = biasSat->NumberOfCodeBiases;
688 if (ii >= CLOCKORBIT_NUMBIAS)
689 break;
690 biasSat->NumberOfCodeBiases += 1;
691 biasSat->Biases[ii].Type = CODETYPEGPS_L2_CML;
692 biasSat->Biases[ii].Bias = it.value();
693 }
694 else if (it.key() == "2P") {
695 int ii = biasSat->NumberOfCodeBiases;
696 if (ii >= CLOCKORBIT_NUMBIAS)
697 break;
698 biasSat->NumberOfCodeBiases += 1;
699 biasSat->Biases[ii].Type = CODETYPEGPS_L2_P;
700 biasSat->Biases[ii].Bias = it.value();
701 }
702 else if (it.key() == "2W") {
703 int ii = biasSat->NumberOfCodeBiases;
704 if (ii >= CLOCKORBIT_NUMBIAS)
705 break;
706 biasSat->NumberOfCodeBiases += 1;
707 biasSat->Biases[ii].Type = CODETYPEGPS_L2_Z;
708 biasSat->Biases[ii].Bias = it.value();
709 }
710 else if (it.key() == "5I") {
711 int ii = biasSat->NumberOfCodeBiases;
712 if (ii >= CLOCKORBIT_NUMBIAS)
713 break;
714 biasSat->NumberOfCodeBiases += 1;
715 biasSat->Biases[ii].Type = CODETYPEGPS_L5_I;
716 biasSat->Biases[ii].Bias = it.value();
717 }
718 else if (it.key() == "5Q") {
719 int ii = biasSat->NumberOfCodeBiases;
720 if (ii >= CLOCKORBIT_NUMBIAS)
721 break;
722 biasSat->NumberOfCodeBiases += 1;
723 biasSat->Biases[ii].Type = CODETYPEGPS_L5_Q;
724 biasSat->Biases[ii].Bias = it.value();
725 }
726 else if (it.key() == "5X") {
727 int ii = biasSat->NumberOfCodeBiases;
728 if (ii >= CLOCKORBIT_NUMBIAS)
729 break;
730 biasSat->NumberOfCodeBiases += 1;
731 biasSat->Biases[ii].Type = CODETYPEGPS_L5_IQ;
732 biasSat->Biases[ii].Bias = it.value();
733 }
734 }
735 }
736 else if (prn.system() == 'R') {
737 QMapIterator<QString, double> it(codeBiases);
738 while (it.hasNext()) {
739 it.next();
740 if (it.key() == "1C") {
741 int ii = biasSat->NumberOfCodeBiases;
742 if (ii >= CLOCKORBIT_NUMBIAS)
743 break;
744 biasSat->NumberOfCodeBiases += 1;
745 biasSat->Biases[ii].Type = CODETYPEGLONASS_L1_CA;
746 biasSat->Biases[ii].Bias = it.value();
747 }
748 else if (it.key() == "1P") {
749 int ii = biasSat->NumberOfCodeBiases;
750 if (ii >= CLOCKORBIT_NUMBIAS)
751 break;
752 biasSat->NumberOfCodeBiases += 1;
753 biasSat->Biases[ii].Type = CODETYPEGLONASS_L1_P;
754 biasSat->Biases[ii].Bias = it.value();
755 }
756 else if (it.key() == "2C") {
757 int ii = biasSat->NumberOfCodeBiases;
758 if (ii >= CLOCKORBIT_NUMBIAS)
759 break;
760 biasSat->NumberOfCodeBiases += 1;
761 biasSat->Biases[ii].Type = CODETYPEGLONASS_L2_CA;
762 biasSat->Biases[ii].Bias = it.value();
763 }
764 else if (it.key() == "2P") {
765 int ii = biasSat->NumberOfCodeBiases;
766 if (ii >= CLOCKORBIT_NUMBIAS)
767 break;
768 biasSat->NumberOfCodeBiases += 1;
769 biasSat->Biases[ii].Type = CODETYPEGLONASS_L2_P;
770 biasSat->Biases[ii].Bias = it.value();
771 }
772 }
773 }
774 else if (prn.system() == 'E') {
775 QMapIterator<QString, double> it(codeBiases);
776 while (it.hasNext()) {
777 it.next();
778 if (it.key() == "1A") {
779 int ii = biasSat->NumberOfCodeBiases;
780 if (ii >= CLOCKORBIT_NUMBIAS)
781 break;
782 biasSat->NumberOfCodeBiases += 1;
783 biasSat->Biases[ii].Type = CODETYPEGALILEO_E1_A;
784 biasSat->Biases[ii].Bias = it.value();
785 }
786 else if (it.key() == "1B") {
787 int ii = biasSat->NumberOfCodeBiases;
788 if (ii >= CLOCKORBIT_NUMBIAS)
789 break;
790 biasSat->NumberOfCodeBiases += 1;
791 biasSat->Biases[ii].Type = CODETYPEGALILEO_E1_B;
792 biasSat->Biases[ii].Bias = it.value();
793 }
794 else if (it.key() == "1C") {
795 int ii = biasSat->NumberOfCodeBiases;
796 if (ii >= CLOCKORBIT_NUMBIAS)
797 break;
798 biasSat->NumberOfCodeBiases += 1;
799 biasSat->Biases[ii].Type = CODETYPEGALILEO_E1_C;
800 biasSat->Biases[ii].Bias = it.value();
801 }
802 else if (it.key() == "1X") {
803 int ii = biasSat->NumberOfCodeBiases;
804 if (ii >= CLOCKORBIT_NUMBIAS)
805 break;
806 biasSat->NumberOfCodeBiases += 1;
807 biasSat->Biases[ii].Type = CODETYPEGALILEO_E1_BC;
808 biasSat->Biases[ii].Bias = it.value();
809 }
810 else if (it.key() == "1Z") {
811 int ii = biasSat->NumberOfCodeBiases;
812 if (ii >= CLOCKORBIT_NUMBIAS)
813 break;
814 biasSat->NumberOfCodeBiases += 1;
815 biasSat->Biases[ii].Type = CODETYPEGALILEO_E1_ABC;
816 biasSat->Biases[ii].Bias = it.value();
817 }
818 else if (it.key() == "5I") {
819 int ii = biasSat->NumberOfCodeBiases;
820 if (ii >= CLOCKORBIT_NUMBIAS)
821 break;
822 biasSat->NumberOfCodeBiases += 1;
823 biasSat->Biases[ii].Type = CODETYPEGALILEO_E5A_I;
824 biasSat->Biases[ii].Bias = it.value();
825 }
826 else if (it.key() == "5Q") {
827 int ii = biasSat->NumberOfCodeBiases;
828 if (ii >= CLOCKORBIT_NUMBIAS)
829 break;
830 biasSat->NumberOfCodeBiases += 1;
831 biasSat->Biases[ii].Type = CODETYPEGALILEO_E5A_Q;
832 biasSat->Biases[ii].Bias = it.value();
833 }
834 else if (it.key() == "5X") {
835 int ii = biasSat->NumberOfCodeBiases;
836 if (ii >= CLOCKORBIT_NUMBIAS)
837 break;
838 biasSat->NumberOfCodeBiases += 1;
839 biasSat->Biases[ii].Type = CODETYPEGALILEO_E5A_IQ;
840 biasSat->Biases[ii].Bias = it.value();
841 }
842 else if (it.key() == "7I") {
843 int ii = biasSat->NumberOfCodeBiases;
844 if (ii >= CLOCKORBIT_NUMBIAS)
845 break;
846 biasSat->NumberOfCodeBiases += 1;
847 biasSat->Biases[ii].Type = CODETYPEGALILEO_E5B_I;
848 biasSat->Biases[ii].Bias = it.value();
849 }
850 else if (it.key() == "7Q") {
851 int ii = biasSat->NumberOfCodeBiases;
852 if (ii >= CLOCKORBIT_NUMBIAS)
853 break;
854 biasSat->NumberOfCodeBiases += 1;
855 biasSat->Biases[ii].Type = CODETYPEGALILEO_E5B_Q;
856 biasSat->Biases[ii].Bias = it.value();
857 }
858 else if (it.key() == "7X") {
859 int ii = biasSat->NumberOfCodeBiases;
860 if (ii >= CLOCKORBIT_NUMBIAS)
861 break;
862 biasSat->NumberOfCodeBiases += 1;
863 biasSat->Biases[ii].Type = CODETYPEGALILEO_E5B_IQ;
864 biasSat->Biases[ii].Bias = it.value();
865 }
866 else if (it.key() == "8I") {
867 int ii = biasSat->NumberOfCodeBiases;
868 if (ii >= CLOCKORBIT_NUMBIAS)
869 break;
870 biasSat->NumberOfCodeBiases += 1;
871 biasSat->Biases[ii].Type = CODETYPEGALILEO_E5_I;
872 biasSat->Biases[ii].Bias = it.value();
873 }
874 else if (it.key() == "8Q") {
875 int ii = biasSat->NumberOfCodeBiases;
876 if (ii >= CLOCKORBIT_NUMBIAS)
877 break;
878 biasSat->NumberOfCodeBiases += 1;
879 biasSat->Biases[ii].Type = CODETYPEGALILEO_E5_Q;
880 biasSat->Biases[ii].Bias = it.value();
881 }
882 else if (it.key() == "8X") {
883 int ii = biasSat->NumberOfCodeBiases;
884 if (ii >= CLOCKORBIT_NUMBIAS)
885 break;
886 biasSat->NumberOfCodeBiases += 1;
887 biasSat->Biases[ii].Type = CODETYPEGALILEO_E5_IQ;
888 biasSat->Biases[ii].Bias = it.value();
889 }
890 else if (it.key() == "6A") {
891 int ii = biasSat->NumberOfCodeBiases;
892 if (ii >= CLOCKORBIT_NUMBIAS)
893 break;
894 biasSat->NumberOfCodeBiases += 1;
895 biasSat->Biases[ii].Type = CODETYPEGALILEO_E6_A;
896 biasSat->Biases[ii].Bias = it.value();
897 }
898 else if (it.key() == "6B") {
899 int ii = biasSat->NumberOfCodeBiases;
900 if (ii >= CLOCKORBIT_NUMBIAS)
901 break;
902 biasSat->NumberOfCodeBiases += 1;
903 biasSat->Biases[ii].Type = CODETYPEGALILEO_E6_B;
904 biasSat->Biases[ii].Bias = it.value();
905 }
906 else if (it.key() == "6C") {
907 int ii = biasSat->NumberOfCodeBiases;
908 if (ii >= CLOCKORBIT_NUMBIAS)
909 break;
910 biasSat->NumberOfCodeBiases += 1;
911 biasSat->Biases[ii].Type = CODETYPEGALILEO_E6_C;
912 biasSat->Biases[ii].Bias = it.value();
913 }
914 else if (it.key() == "6X") {
915 int ii = biasSat->NumberOfCodeBiases;
916 if (ii >= CLOCKORBIT_NUMBIAS)
917 break;
918 biasSat->NumberOfCodeBiases += 1;
919 biasSat->Biases[ii].Type = CODETYPEGALILEO_E6_BC;
920 biasSat->Biases[ii].Bias = it.value();
921 }
922 else if (it.key() == "6Z") {
923 int ii = biasSat->NumberOfCodeBiases;
924 if (ii >= CLOCKORBIT_NUMBIAS)
925 break;
926 biasSat->NumberOfCodeBiases += 1;
927 biasSat->Biases[ii].Type = CODETYPEGALILEO_E6_ABC;
928 biasSat->Biases[ii].Bias = it.value();
929 }
930 }
931 }
932 else if (prn.system() == 'J') {
933 QMapIterator<QString, double> it(codeBiases);
934 while (it.hasNext()) {
935 it.next();
936 if (it.key() == "1C") {
937 int ii = biasSat->NumberOfCodeBiases;
938 if (ii >= CLOCKORBIT_NUMBIAS)
939 break;
940 biasSat->NumberOfCodeBiases += 1;
941 biasSat->Biases[ii].Type = CODETYPEQZSS_L1_CA;
942 biasSat->Biases[ii].Bias = it.value();
943 }
944 else if (it.key() == "1S") {
945 int ii = biasSat->NumberOfCodeBiases;
946 if (ii >= CLOCKORBIT_NUMBIAS)
947 break;
948 biasSat->NumberOfCodeBiases += 1;
949 biasSat->Biases[ii].Type = CODETYPEQZSS_L1C_D;
950 biasSat->Biases[ii].Bias = it.value();
951 }
952 else if (it.key() == "1L") {
953 int ii = biasSat->NumberOfCodeBiases;
954 if (ii >= CLOCKORBIT_NUMBIAS)
955 break;
956 biasSat->NumberOfCodeBiases += 1;
957 biasSat->Biases[ii].Type = CODETYPEQZSS_L1C_P;
958 biasSat->Biases[ii].Bias = it.value();
959 }
960 else if (it.key() == "1X") {
961 int ii = biasSat->NumberOfCodeBiases;
962 if (ii >= CLOCKORBIT_NUMBIAS)
963 break;
964 biasSat->NumberOfCodeBiases += 1;
965 biasSat->Biases[ii].Type = CODETYPEQZSS_L1C_DP;
966 biasSat->Biases[ii].Bias = it.value();
967 }
968 else if (it.key() == "2S") {
969 int ii = biasSat->NumberOfCodeBiases;
970 if (ii >= CLOCKORBIT_NUMBIAS)
971 break;
972 biasSat->NumberOfCodeBiases += 1;
973 biasSat->Biases[ii].Type = CODETYPEQZSS_L2C_M;
974 biasSat->Biases[ii].Bias = it.value();
975 }
976 else if (it.key() == "2L") {
977 int ii = biasSat->NumberOfCodeBiases;
978 if (ii >= CLOCKORBIT_NUMBIAS)
979 break;
980 biasSat->NumberOfCodeBiases += 1;
981 biasSat->Biases[ii].Type = CODETYPEQZSS_L2C_L;
982 biasSat->Biases[ii].Bias = it.value();
983 }
984 else if (it.key() == "2X") {
985 int ii = biasSat->NumberOfCodeBiases;
986 if (ii >= CLOCKORBIT_NUMBIAS)
987 break;
988 biasSat->NumberOfCodeBiases += 1;
989 biasSat->Biases[ii].Type = CODETYPEQZSS_L2C_ML;
990 biasSat->Biases[ii].Bias = it.value();
991 }
992 else if (it.key() == "5I") {
993 int ii = biasSat->NumberOfCodeBiases;
994 if (ii >= CLOCKORBIT_NUMBIAS)
995 break;
996 biasSat->NumberOfCodeBiases += 1;
997 biasSat->Biases[ii].Type = CODETYPEQZSS_L5_I;
998 biasSat->Biases[ii].Bias = it.value();
999 }
1000 else if (it.key() == "5Q") {
1001 int ii = biasSat->NumberOfCodeBiases;
1002 if (ii >= CLOCKORBIT_NUMBIAS)
1003 break;
1004 biasSat->NumberOfCodeBiases += 1;
1005 biasSat->Biases[ii].Type = CODETYPEQZSS_L5_Q;
1006 biasSat->Biases[ii].Bias = it.value();
1007 }
1008 else if (it.key() == "5X") {
1009 int ii = biasSat->NumberOfCodeBiases;
1010 if (ii >= CLOCKORBIT_NUMBIAS)
1011 break;
1012 biasSat->NumberOfCodeBiases += 1;
1013 biasSat->Biases[ii].Type = CODETYPEQZSS_L5_IQ;
1014 biasSat->Biases[ii].Bias = it.value();
1015 }
1016 else if (it.key() == "6S") {
1017 int ii = biasSat->NumberOfCodeBiases;
1018 if (ii >= CLOCKORBIT_NUMBIAS)
1019 break;
1020 biasSat->NumberOfCodeBiases += 1;
1021 biasSat->Biases[ii].Type = CODETYPEQZSS_LEX_S;
1022 biasSat->Biases[ii].Bias = it.value();
1023 }
1024 else if (it.key() == "6L") {
1025 int ii = biasSat->NumberOfCodeBiases;
1026 if (ii >= CLOCKORBIT_NUMBIAS)
1027 break;
1028 biasSat->NumberOfCodeBiases += 1;
1029 biasSat->Biases[ii].Type = CODETYPEQZSS_LEX_L;
1030 biasSat->Biases[ii].Bias = it.value();
1031 }
1032 else if (it.key() == "6X") {
1033 int ii = biasSat->NumberOfCodeBiases;
1034 if (ii >= CLOCKORBIT_NUMBIAS)
1035 break;
1036 biasSat->NumberOfCodeBiases += 1;
1037 biasSat->Biases[ii].Type = CODETYPEQZSS_LEX_SL;
1038 biasSat->Biases[ii].Bias = it.value();
1039 }
1040 }
1041 }
1042 else if (prn.system() == 'S') {
1043 QMapIterator<QString, double> it(codeBiases);
1044 while (it.hasNext()) {
1045 it.next();
1046 if (it.key() == "1C") {
1047 int ii = biasSat->NumberOfCodeBiases;
1048 if (ii >= CLOCKORBIT_NUMBIAS)
1049 break;
1050 biasSat->NumberOfCodeBiases += 1;
1051 biasSat->Biases[ii].Type = CODETYPE_SBAS_L1_CA;
1052 biasSat->Biases[ii].Bias = it.value();
1053 }
1054 else if (it.key() == "5I") {
1055 int ii = biasSat->NumberOfCodeBiases;
1056 if (ii >= CLOCKORBIT_NUMBIAS)
1057 break;
1058 biasSat->NumberOfCodeBiases += 1;
1059 biasSat->Biases[ii].Type = CODETYPE_SBAS_L5_I;
1060 biasSat->Biases[ii].Bias = it.value();
1061 }
1062 else if (it.key() == "5Q") {
1063 int ii = biasSat->NumberOfCodeBiases;
1064 if (ii >= CLOCKORBIT_NUMBIAS)
1065 break;
1066 biasSat->NumberOfCodeBiases += 1;
1067 biasSat->Biases[ii].Type = CODETYPE_SBAS_L5_Q;
1068 biasSat->Biases[ii].Bias = it.value();
1069 }
1070 else if (it.key() == "5X") {
1071 int ii = biasSat->NumberOfCodeBiases;
1072 if (ii >= CLOCKORBIT_NUMBIAS)
1073 break;
1074 biasSat->NumberOfCodeBiases += 1;
1075 biasSat->Biases[ii].Type = CODETYPE_SBAS_L5_IQ;
1076 biasSat->Biases[ii].Bias = it.value();
1077 }
1078 }
1079 }
1080 else if (prn.system() == 'C') {
1081 QMapIterator<QString, double> it(codeBiases);
1082 while (it.hasNext()) {
1083 it.next();
1084 if (it.key() == "2I") {
1085 int ii = biasSat->NumberOfCodeBiases;
1086 if (ii >= CLOCKORBIT_NUMBIAS)
1087 break;
1088 biasSat->NumberOfCodeBiases += 1;
1089 biasSat->Biases[ii].Type = CODETYPE_BDS_B1_I;
1090 biasSat->Biases[ii].Bias = it.value();
1091 }
1092 else if (it.key() == "2Q") {
1093 int ii = biasSat->NumberOfCodeBiases;
1094 if (ii >= CLOCKORBIT_NUMBIAS)
1095 break;
1096 biasSat->NumberOfCodeBiases += 1;
1097 biasSat->Biases[ii].Type = CODETYPE_BDS_B1_Q;
1098 biasSat->Biases[ii].Bias = it.value();
1099 }
1100 else if (it.key() == "2X") {
1101 int ii = biasSat->NumberOfCodeBiases;
1102 if (ii >= CLOCKORBIT_NUMBIAS)
1103 break;
1104 biasSat->NumberOfCodeBiases += 1;
1105 biasSat->Biases[ii].Type = CODETYPE_BDS_B1_IQ;
1106 biasSat->Biases[ii].Bias = it.value();
1107 }
1108 else if (it.key() == "6I") {
1109 int ii = biasSat->NumberOfCodeBiases;
1110 if (ii >= CLOCKORBIT_NUMBIAS)
1111 break;
1112 biasSat->NumberOfCodeBiases += 1;
1113 biasSat->Biases[ii].Type = CODETYPE_BDS_B3_I;
1114 biasSat->Biases[ii].Bias = it.value();
1115 }
1116 else if (it.key() == "6Q") {
1117 int ii = biasSat->NumberOfCodeBiases;
1118 if (ii >= CLOCKORBIT_NUMBIAS)
1119 break;
1120 biasSat->NumberOfCodeBiases += 1;
1121 biasSat->Biases[ii].Type = CODETYPE_BDS_B3_Q;
1122 biasSat->Biases[ii].Bias = it.value();
1123 }
1124 else if (it.key() == "6X") {
1125 int ii = biasSat->NumberOfCodeBiases;
1126 if (ii >= CLOCKORBIT_NUMBIAS)
1127 break;
1128 biasSat->NumberOfCodeBiases += 1;
1129 biasSat->Biases[ii].Type = CODETYPE_BDS_B3_IQ;
1130 biasSat->Biases[ii].Bias = it.value();
1131 }
1132 else if (it.key() == "7I") {
1133 int ii = biasSat->NumberOfCodeBiases;
1134 if (ii >= CLOCKORBIT_NUMBIAS)
1135 break;
1136 biasSat->NumberOfCodeBiases += 1;
1137 biasSat->Biases[ii].Type = CODETYPE_BDS_B2_I;
1138 biasSat->Biases[ii].Bias = it.value();
1139 }
1140 else if (it.key() == "7Q") {
1141 int ii = biasSat->NumberOfCodeBiases;
1142 if (ii >= CLOCKORBIT_NUMBIAS)
1143 break;
1144 biasSat->NumberOfCodeBiases += 1;
1145 biasSat->Biases[ii].Type = CODETYPE_BDS_B2_Q;
1146 biasSat->Biases[ii].Bias = it.value();
1147 }
1148 else if (it.key() == "7X") {
1149 int ii = biasSat->NumberOfCodeBiases;
1150 if (ii >= CLOCKORBIT_NUMBIAS)
1151 break;
1152 biasSat->NumberOfCodeBiases += 1;
1153 biasSat->Biases[ii].Type = CODETYPE_BDS_B2_IQ;
1154 biasSat->Biases[ii].Bias = it.value();
1155 }
1156 }
1157 }
1158 }
1159 // Phase Biases
1160 // ------------
1161 struct PhaseBias::PhaseBiasSat* phasebiasSat = 0;
1162 if (!phaseBiasList.isEmpty()) {
1163 if (prn.system() == 'G') {
1164 phasebiasSat = phasebias.Sat
1165 + phasebias.NumberOfSat[CLOCKORBIT_SATGPS];
1166 ++phasebias.NumberOfSat[CLOCKORBIT_SATGPS];
1167 }
1168 else if (prn.system() == 'R') {
1169 phasebiasSat = phasebias.Sat + CLOCKORBIT_NUMGPS
1170 + phasebias.NumberOfSat[CLOCKORBIT_SATGLONASS];
1171 ++phasebias.NumberOfSat[CLOCKORBIT_SATGLONASS];
1172 }
1173 else if (prn.system() == 'E') {
1174 phasebiasSat = phasebias.Sat + CLOCKORBIT_NUMGPS
1175 + CLOCKORBIT_NUMGLONASS
1176 + phasebias.NumberOfSat[CLOCKORBIT_SATGALILEO];
1177 ++phasebias.NumberOfSat[CLOCKORBIT_SATGALILEO];
1178 }
1179 else if (prn.system() == 'J') {
1180 phasebiasSat = phasebias.Sat + CLOCKORBIT_NUMGPS
1181 + CLOCKORBIT_NUMGLONASS + CLOCKORBIT_NUMGALILEO
1182 + phasebias.NumberOfSat[CLOCKORBIT_SATQZSS];
1183 ++phasebias.NumberOfSat[CLOCKORBIT_SATQZSS];
1184 }
1185 else if (prn.system() == 'S') {
1186 phasebiasSat = phasebias.Sat + CLOCKORBIT_NUMGPS
1187 + CLOCKORBIT_NUMGLONASS + CLOCKORBIT_NUMGALILEO
1188 + CLOCKORBIT_NUMQZSS + phasebias.NumberOfSat[CLOCKORBIT_SATSBAS];
1189 ++phasebias.NumberOfSat[CLOCKORBIT_SATSBAS];
1190 }
1191 else if (prn.system() == 'C') {
1192 phasebiasSat = phasebias.Sat + CLOCKORBIT_NUMGPS
1193 + CLOCKORBIT_NUMGLONASS + CLOCKORBIT_NUMGALILEO
1194 + CLOCKORBIT_NUMQZSS + CLOCKORBIT_NUMSBAS
1195 + phasebias.NumberOfSat[CLOCKORBIT_SATBDS];
1196 ++phasebias.NumberOfSat[CLOCKORBIT_SATBDS];
1197 }
1198 }
1199
1200 if (phasebiasSat) {
1201 phasebias.DispersiveBiasConsistencyIndicator = dispersiveBiasConsistenyIndicator;
1202 phasebias.MWConsistencyIndicator = mwConsistencyIndicator;
1203 phasebiasSat->ID = prn.number();
1204 phasebiasSat->NumberOfPhaseBiases = 0;
1205 phasebiasSat->YawAngle = pbSat.yawAngle;
1206 phasebiasSat->YawRate = pbSat.yawRate;
1207 if (prn.system() == 'G') {
1208 QListIterator<phaseBiasSignal> it(phaseBiasList);
1209 while (it.hasNext()) {
1210 const phaseBiasSignal &pbSig = it.next();
1211 if (pbSig.type == "1C") {
1212 int ii = phasebiasSat->NumberOfPhaseBiases;
1213 if (ii >= CLOCKORBIT_NUMBIAS)
1214 break;
1215 phasebiasSat->NumberOfPhaseBiases += 1;
1216 phasebiasSat->Biases[ii].Type = CODETYPEGPS_L1_CA;
1217 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1218 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
1219 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1220 pbSig.wlIndicator;
1221 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1222 pbSig.discontinuityCounter;
1223 }
1224 else if (pbSig.type == "1S") {
1225 int ii = phasebiasSat->NumberOfPhaseBiases;
1226 if (ii >= CLOCKORBIT_NUMBIAS)
1227 break;
1228 phasebiasSat->NumberOfPhaseBiases += 1;
1229 phasebiasSat->Biases[ii].Type = CODETYPEGPS_L1C_D;
1230 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1231 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
1232 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1233 pbSig.wlIndicator;
1234 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1235 pbSig.discontinuityCounter;
1236 }
1237 else if (pbSig.type == "1L") {
1238 int ii = phasebiasSat->NumberOfPhaseBiases;
1239 if (ii >= CLOCKORBIT_NUMBIAS)
1240 break;
1241 phasebiasSat->NumberOfPhaseBiases += 1;
1242 phasebiasSat->Biases[ii].Type = CODETYPEGPS_L1C_P;
1243 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1244 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
1245 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1246 pbSig.wlIndicator;
1247 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1248 pbSig.discontinuityCounter;
1249 }
1250 else if (pbSig.type == "1X") {
1251 int ii = phasebiasSat->NumberOfPhaseBiases;
1252 if (ii >= CLOCKORBIT_NUMBIAS)
1253 break;
1254 phasebiasSat->NumberOfPhaseBiases += 1;
1255 phasebiasSat->Biases[ii].Type = CODETYPEGPS_L1C_P;
1256 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1257 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
1258 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1259 pbSig.wlIndicator;
1260 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1261 pbSig.discontinuityCounter;
1262 }
1263 else if (pbSig.type == "1P") {
1264 int ii = phasebiasSat->NumberOfPhaseBiases;
1265 if (ii >= CLOCKORBIT_NUMBIAS)
1266 break;
1267 phasebiasSat->NumberOfPhaseBiases += 1;
1268 phasebiasSat->Biases[ii].Type = CODETYPEGPS_L1_P;
1269 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1270 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
1271 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1272 pbSig.wlIndicator;
1273 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1274 pbSig.discontinuityCounter;
1275 }
1276 else if (pbSig.type == "1W") {
1277 int ii = phasebiasSat->NumberOfPhaseBiases;
1278 if (ii >= CLOCKORBIT_NUMBIAS)
1279 break;
1280 phasebiasSat->NumberOfPhaseBiases += 1;
1281 phasebiasSat->Biases[ii].Type = CODETYPEGPS_L1_Z;
1282 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1283 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
1284 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1285 pbSig.wlIndicator;
1286 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1287 pbSig.discontinuityCounter;
1288 }
1289 else if (pbSig.type == "2C") {
1290 int ii = phasebiasSat->NumberOfPhaseBiases;
1291 if (ii >= CLOCKORBIT_NUMBIAS)
1292 break;
1293 phasebiasSat->NumberOfPhaseBiases += 1;
1294 phasebiasSat->Biases[ii].Type = CODETYPEGPS_L2_CA;
1295 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1296 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
1297 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1298 pbSig.wlIndicator;
1299 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1300 pbSig.discontinuityCounter;
1301 }
1302 else if (pbSig.type == "2D") {
1303 int ii = phasebiasSat->NumberOfPhaseBiases;
1304 if (ii >= CLOCKORBIT_NUMBIAS)
1305 break;
1306 phasebiasSat->NumberOfPhaseBiases += 1;
1307 phasebiasSat->Biases[ii].Type = CODETYPEGPS_SEMI_CODELESS;
1308 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1309 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
1310 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1311 pbSig.wlIndicator;
1312 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1313 pbSig.discontinuityCounter;
1314 }
1315 else if (pbSig.type == "2S") {
1316 int ii = phasebiasSat->NumberOfPhaseBiases;
1317 if (ii >= CLOCKORBIT_NUMBIAS)
1318 break;
1319 phasebiasSat->NumberOfPhaseBiases += 1;
1320 phasebiasSat->Biases[ii].Type = CODETYPEGPS_L2_CM;
1321 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1322 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
1323 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1324 pbSig.wlIndicator;
1325 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1326 pbSig.discontinuityCounter;
1327 }
1328 else if (pbSig.type == "2L") {
1329 int ii = phasebiasSat->NumberOfPhaseBiases;
1330 if (ii >= CLOCKORBIT_NUMBIAS)
1331 break;
1332 phasebiasSat->NumberOfPhaseBiases += 1;
1333 phasebiasSat->Biases[ii].Type = CODETYPEGPS_L2_CL;
1334 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1335 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
1336 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1337 pbSig.wlIndicator;
1338 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1339 pbSig.discontinuityCounter;
1340 }
1341 else if (pbSig.type == "2X") {
1342 int ii = phasebiasSat->NumberOfPhaseBiases;
1343 if (ii >= CLOCKORBIT_NUMBIAS)
1344 break;
1345 phasebiasSat->NumberOfPhaseBiases += 1;
1346 phasebiasSat->Biases[ii].Type = CODETYPEGPS_L2_CML;
1347 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1348 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
1349 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1350 pbSig.wlIndicator;
1351 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1352 pbSig.discontinuityCounter;
1353 }
1354 else if (pbSig.type == "2P") {
1355 int ii = phasebiasSat->NumberOfPhaseBiases;
1356 if (ii >= CLOCKORBIT_NUMBIAS)
1357 break;
1358 phasebiasSat->NumberOfPhaseBiases += 1;
1359 phasebiasSat->Biases[ii].Type = CODETYPEGPS_L2_P;
1360 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1361 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
1362 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1363 pbSig.wlIndicator;
1364 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1365 pbSig.discontinuityCounter;
1366 }
1367 else if (pbSig.type == "2W") {
1368 int ii = phasebiasSat->NumberOfPhaseBiases;
1369 if (ii >= CLOCKORBIT_NUMBIAS)
1370 break;
1371 phasebiasSat->NumberOfPhaseBiases += 1;
1372 phasebiasSat->Biases[ii].Type = CODETYPEGPS_L2_Z;
1373 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1374 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
1375 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1376 pbSig.wlIndicator;
1377 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1378 pbSig.discontinuityCounter;
1379 }
1380 else if (pbSig.type == "5I") {
1381 int ii = phasebiasSat->NumberOfPhaseBiases;
1382 if (ii >= CLOCKORBIT_NUMBIAS)
1383 break;
1384 phasebiasSat->NumberOfPhaseBiases += 1;
1385 phasebiasSat->Biases[ii].Type = CODETYPEGPS_L5_I;
1386 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1387 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
1388 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1389 pbSig.wlIndicator;
1390 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1391 pbSig.discontinuityCounter;
1392 }
1393 else if (pbSig.type == "5Q") {
1394 int ii = phasebiasSat->NumberOfPhaseBiases;
1395 if (ii >= CLOCKORBIT_NUMBIAS)
1396 break;
1397 phasebiasSat->NumberOfPhaseBiases += 1;
1398 phasebiasSat->Biases[ii].Type = CODETYPEGPS_L5_Q;
1399 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1400 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
1401 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1402 pbSig.wlIndicator;
1403 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1404 pbSig.discontinuityCounter;
1405 }
1406 else if (pbSig.type == "5X") {
1407 int ii = phasebiasSat->NumberOfPhaseBiases;
1408 if (ii >= CLOCKORBIT_NUMBIAS)
1409 break;
1410 phasebiasSat->NumberOfPhaseBiases += 1;
1411 phasebiasSat->Biases[ii].Type = CODETYPEGPS_L5_IQ;
1412 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1413 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
1414 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1415 pbSig.wlIndicator;
1416 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1417 pbSig.discontinuityCounter;
1418 }
1419 }
1420 }
1421 if (prn.system() == 'R') {
1422 QListIterator<phaseBiasSignal> it(phaseBiasList);
1423 while (it.hasNext()) {
1424 const phaseBiasSignal &pbSig = it.next();
1425 if (pbSig.type == "1C") {
1426 int ii = phasebiasSat->NumberOfPhaseBiases;
1427 if (ii >= CLOCKORBIT_NUMBIAS)
1428 break;
1429 phasebiasSat->NumberOfPhaseBiases += 1;
1430 phasebiasSat->Biases[ii].Type = CODETYPEGLONASS_L1_CA;
1431 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1432 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
1433 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1434 pbSig.wlIndicator;
1435 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1436 pbSig.discontinuityCounter;
1437 }
1438 else if (pbSig.type == "1P") {
1439 int ii = phasebiasSat->NumberOfPhaseBiases;
1440 if (ii >= CLOCKORBIT_NUMBIAS)
1441 break;
1442 phasebiasSat->NumberOfPhaseBiases += 1;
1443 phasebiasSat->Biases[ii].Type = CODETYPEGLONASS_L1_P;
1444 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1445 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
1446 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1447 pbSig.wlIndicator;
1448 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1449 pbSig.discontinuityCounter;
1450 }
1451 else if (pbSig.type == "2C") {
1452 int ii = phasebiasSat->NumberOfPhaseBiases;
1453 if (ii >= CLOCKORBIT_NUMBIAS)
1454 break;
1455 phasebiasSat->NumberOfPhaseBiases += 1;
1456 phasebiasSat->Biases[ii].Type = CODETYPEGLONASS_L2_CA;
1457 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1458 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
1459 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1460 pbSig.wlIndicator;
1461 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1462 pbSig.discontinuityCounter;
1463 }
1464 else if (pbSig.type == "2P") {
1465 int ii = phasebiasSat->NumberOfPhaseBiases;
1466 if (ii >= CLOCKORBIT_NUMBIAS)
1467 break;
1468 phasebiasSat->NumberOfPhaseBiases += 1;
1469 phasebiasSat->Biases[ii].Type = CODETYPEGLONASS_L2_P;
1470 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1471 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
1472 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1473 pbSig.wlIndicator;
1474 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1475 pbSig.discontinuityCounter;
1476 }
1477 }
1478 }
1479 if (prn.system() == 'E') {
1480 QListIterator<phaseBiasSignal> it(phaseBiasList);
1481 while (it.hasNext()) {
1482 const phaseBiasSignal &pbSig = it.next();
1483 if (pbSig.type == "1A") {
1484 int ii = phasebiasSat->NumberOfPhaseBiases;
1485 if (ii >= CLOCKORBIT_NUMBIAS)
1486 break;
1487 phasebiasSat->NumberOfPhaseBiases += 1;
1488 phasebiasSat->Biases[ii].Type = CODETYPEGALILEO_E1_A;
1489 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1490 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
1491 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1492 pbSig.wlIndicator;
1493 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1494 pbSig.discontinuityCounter;
1495 }
1496 else if (pbSig.type == "1B") {
1497 int ii = phasebiasSat->NumberOfPhaseBiases;
1498 if (ii >= CLOCKORBIT_NUMBIAS)
1499 break;
1500 phasebiasSat->NumberOfPhaseBiases += 1;
1501 phasebiasSat->Biases[ii].Type = CODETYPEGALILEO_E1_B;
1502 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1503 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
1504 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1505 pbSig.wlIndicator;
1506 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1507 pbSig.discontinuityCounter;
1508 }
1509 else if (pbSig.type == "1C") {
1510 int ii = phasebiasSat->NumberOfPhaseBiases;
1511 if (ii >= CLOCKORBIT_NUMBIAS)
1512 break;
1513 phasebiasSat->NumberOfPhaseBiases += 1;
1514 phasebiasSat->Biases[ii].Type = CODETYPEGALILEO_E1_C;
1515 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1516 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
1517 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1518 pbSig.wlIndicator;
1519 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1520 pbSig.discontinuityCounter;
1521 }
1522 else if (pbSig.type == "1X") {
1523 int ii = phasebiasSat->NumberOfPhaseBiases;
1524 if (ii >= CLOCKORBIT_NUMBIAS)
1525 break;
1526 phasebiasSat->NumberOfPhaseBiases += 1;
1527 phasebiasSat->Biases[ii].Type = CODETYPEGALILEO_E1_BC;
1528 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1529 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
1530 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1531 pbSig.wlIndicator;
1532 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1533 pbSig.discontinuityCounter;
1534 }
1535 else if (pbSig.type == "1Z") {
1536 int ii = phasebiasSat->NumberOfPhaseBiases;
1537 if (ii >= CLOCKORBIT_NUMBIAS)
1538 break;
1539 phasebiasSat->NumberOfPhaseBiases += 1;
1540 phasebiasSat->Biases[ii].Type = CODETYPEGALILEO_E1_ABC;
1541 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1542 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
1543 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1544 pbSig.wlIndicator;
1545 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1546 pbSig.discontinuityCounter;
1547 }
1548 else if (pbSig.type == "5I") {
1549 int ii = phasebiasSat->NumberOfPhaseBiases;
1550 if (ii >= CLOCKORBIT_NUMBIAS)
1551 break;
1552 phasebiasSat->NumberOfPhaseBiases += 1;
1553 phasebiasSat->Biases[ii].Type = CODETYPEGALILEO_E5A_I;
1554 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1555 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
1556 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1557 pbSig.wlIndicator;
1558 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1559 pbSig.discontinuityCounter;
1560 }
1561 else if (pbSig.type == "5Q") {
1562 int ii = phasebiasSat->NumberOfPhaseBiases;
1563 if (ii >= CLOCKORBIT_NUMBIAS)
1564 break;
1565 phasebiasSat->NumberOfPhaseBiases += 1;
1566 phasebiasSat->Biases[ii].Type = CODETYPEGALILEO_E5A_Q;
1567 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1568 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
1569 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1570 pbSig.wlIndicator;
1571 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1572 pbSig.discontinuityCounter;
1573 }
1574 else if (pbSig.type == "5X") {
1575 int ii = phasebiasSat->NumberOfPhaseBiases;
1576 if (ii >= CLOCKORBIT_NUMBIAS)
1577 break;
1578 phasebiasSat->NumberOfPhaseBiases += 1;
1579 phasebiasSat->Biases[ii].Type = CODETYPEGALILEO_E5A_IQ;
1580 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1581 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
1582 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1583 pbSig.wlIndicator;
1584 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1585 pbSig.discontinuityCounter;
1586 }
1587 else if (pbSig.type == "7I") {
1588 int ii = phasebiasSat->NumberOfPhaseBiases;
1589 if (ii >= CLOCKORBIT_NUMBIAS)
1590 break;
1591 phasebiasSat->NumberOfPhaseBiases += 1;
1592 phasebiasSat->Biases[ii].Type = CODETYPEGALILEO_E5B_I;
1593 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1594 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
1595 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1596 pbSig.wlIndicator;
1597 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1598 pbSig.discontinuityCounter;
1599 }
1600 else if (pbSig.type == "7Q") {
1601 int ii = phasebiasSat->NumberOfPhaseBiases;
1602 if (ii >= CLOCKORBIT_NUMBIAS)
1603 break;
1604 phasebiasSat->NumberOfPhaseBiases += 1;
1605 phasebiasSat->Biases[ii].Type = CODETYPEGALILEO_E5B_Q;
1606 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1607 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
1608 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1609 pbSig.wlIndicator;
1610 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1611 pbSig.discontinuityCounter;
1612 }
1613 else if (pbSig.type == "7X") {
1614 int ii = phasebiasSat->NumberOfPhaseBiases;
1615 if (ii >= CLOCKORBIT_NUMBIAS)
1616 break;
1617 phasebiasSat->NumberOfPhaseBiases += 1;
1618 phasebiasSat->Biases[ii].Type = CODETYPEGALILEO_E5B_IQ;
1619 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1620 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
1621 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1622 pbSig.wlIndicator;
1623 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1624 pbSig.discontinuityCounter;
1625 }
1626 else if (pbSig.type == "8I") {
1627 int ii = phasebiasSat->NumberOfPhaseBiases;
1628 if (ii >= CLOCKORBIT_NUMBIAS)
1629 break;
1630 phasebiasSat->NumberOfPhaseBiases += 1;
1631 phasebiasSat->Biases[ii].Type = CODETYPEGALILEO_E5_I;
1632 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1633 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
1634 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1635 pbSig.wlIndicator;
1636 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1637 pbSig.discontinuityCounter;
1638 }
1639 else if (pbSig.type == "8Q") {
1640 int ii = phasebiasSat->NumberOfPhaseBiases;
1641 if (ii >= CLOCKORBIT_NUMBIAS)
1642 break;
1643 phasebiasSat->NumberOfPhaseBiases += 1;
1644 phasebiasSat->Biases[ii].Type = CODETYPEGALILEO_E5_Q;
1645 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1646 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
1647 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1648 pbSig.wlIndicator;
1649 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1650 pbSig.discontinuityCounter;
1651 }
1652 else if (pbSig.type == "8X") {
1653 int ii = phasebiasSat->NumberOfPhaseBiases;
1654 if (ii >= CLOCKORBIT_NUMBIAS)
1655 break;
1656 phasebiasSat->NumberOfPhaseBiases += 1;
1657 phasebiasSat->Biases[ii].Type = CODETYPEGALILEO_E5_IQ;
1658 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1659 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
1660 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1661 pbSig.wlIndicator;
1662 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1663 pbSig.discontinuityCounter;
1664 }
1665 else if (pbSig.type == "6A") {
1666 int ii = phasebiasSat->NumberOfPhaseBiases;
1667 if (ii >= CLOCKORBIT_NUMBIAS)
1668 break;
1669 phasebiasSat->NumberOfPhaseBiases += 1;
1670 phasebiasSat->Biases[ii].Type = CODETYPEGALILEO_E6_A;
1671 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1672 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
1673 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1674 pbSig.wlIndicator;
1675 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1676 pbSig.discontinuityCounter;
1677 }
1678 else if (pbSig.type == "6B") {
1679 int ii = phasebiasSat->NumberOfPhaseBiases;
1680 if (ii >= CLOCKORBIT_NUMBIAS)
1681 break;
1682 phasebiasSat->NumberOfPhaseBiases += 1;
1683 phasebiasSat->Biases[ii].Type = CODETYPEGALILEO_E6_B;
1684 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1685 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
1686 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1687 pbSig.wlIndicator;
1688 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1689 pbSig.discontinuityCounter;
1690 }
1691 else if (pbSig.type == "6C") {
1692 int ii = phasebiasSat->NumberOfPhaseBiases;
1693 if (ii >= CLOCKORBIT_NUMBIAS)
1694 break;
1695 phasebiasSat->NumberOfPhaseBiases += 1;
1696 phasebiasSat->Biases[ii].Type = CODETYPEGALILEO_E6_C;
1697 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1698 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
1699 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1700 pbSig.wlIndicator;
1701 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1702 pbSig.discontinuityCounter;
1703 }
1704 else if (pbSig.type == "6X") {
1705 int ii = phasebiasSat->NumberOfPhaseBiases;
1706 if (ii >= CLOCKORBIT_NUMBIAS)
1707 break;
1708 phasebiasSat->NumberOfPhaseBiases += 1;
1709 phasebiasSat->Biases[ii].Type = CODETYPEGALILEO_E6_BC;
1710 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1711 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
1712 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1713 pbSig.wlIndicator;
1714 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1715 pbSig.discontinuityCounter;
1716 }
1717 else if (pbSig.type == "6Z") {
1718 int ii = phasebiasSat->NumberOfPhaseBiases;
1719 if (ii >= CLOCKORBIT_NUMBIAS)
1720 break;
1721 phasebiasSat->NumberOfPhaseBiases += 1;
1722 phasebiasSat->Biases[ii].Type = CODETYPEGALILEO_E6_ABC;
1723 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1724 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
1725 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1726 pbSig.wlIndicator;
1727 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1728 pbSig.discontinuityCounter;
1729 }
1730 }
1731 }
1732 if (prn.system() == 'J') {
1733 QListIterator<phaseBiasSignal> it(phaseBiasList);
1734 while (it.hasNext()) {
1735 const phaseBiasSignal &pbSig = it.next();
1736 if (pbSig.type == "1C") {
1737 int ii = phasebiasSat->NumberOfPhaseBiases;
1738 if (ii >= CLOCKORBIT_NUMBIAS)
1739 break;
1740 phasebiasSat->NumberOfPhaseBiases += 1;
1741 phasebiasSat->Biases[ii].Type = CODETYPEQZSS_L1_CA;
1742 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1743 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
1744 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1745 pbSig.wlIndicator;
1746 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1747 pbSig.discontinuityCounter;
1748 }
1749 else if (pbSig.type == "1S") {
1750 int ii = phasebiasSat->NumberOfPhaseBiases;
1751 if (ii >= CLOCKORBIT_NUMBIAS)
1752 break;
1753 phasebiasSat->NumberOfPhaseBiases += 1;
1754 phasebiasSat->Biases[ii].Type = CODETYPEQZSS_L1C_D;
1755 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1756 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
1757 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1758 pbSig.wlIndicator;
1759 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1760 pbSig.discontinuityCounter;
1761 }
1762 else if (pbSig.type == "1L") {
1763 int ii = phasebiasSat->NumberOfPhaseBiases;
1764 if (ii >= CLOCKORBIT_NUMBIAS)
1765 break;
1766 phasebiasSat->NumberOfPhaseBiases += 1;
1767 phasebiasSat->Biases[ii].Type = CODETYPEQZSS_L1C_P;
1768 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1769 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
1770 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1771 pbSig.wlIndicator;
1772 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1773 pbSig.discontinuityCounter;
1774 }
1775 else if (pbSig.type == "1X") {
1776 int ii = phasebiasSat->NumberOfPhaseBiases;
1777 if (ii >= CLOCKORBIT_NUMBIAS)
1778 break;
1779 phasebiasSat->NumberOfPhaseBiases += 1;
1780 phasebiasSat->Biases[ii].Type = CODETYPEQZSS_L1C_DP;
1781 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1782 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
1783 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1784 pbSig.wlIndicator;
1785 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1786 pbSig.discontinuityCounter;
1787 }
1788 else if (pbSig.type == "2S") {
1789 int ii = phasebiasSat->NumberOfPhaseBiases;
1790 if (ii >= CLOCKORBIT_NUMBIAS)
1791 break;
1792 phasebiasSat->NumberOfPhaseBiases += 1;
1793 phasebiasSat->Biases[ii].Type = CODETYPEQZSS_L2C_M;
1794 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1795 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
1796 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1797 pbSig.wlIndicator;
1798 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1799 pbSig.discontinuityCounter;
1800 }
1801 else if (pbSig.type == "2L") {
1802 int ii = phasebiasSat->NumberOfPhaseBiases;
1803 if (ii >= CLOCKORBIT_NUMBIAS)
1804 break;
1805 phasebiasSat->NumberOfPhaseBiases += 1;
1806 phasebiasSat->Biases[ii].Type = CODETYPEQZSS_L2C_L;
1807 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1808 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
1809 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1810 pbSig.wlIndicator;
1811 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1812 pbSig.discontinuityCounter;
1813 }
1814 else if (pbSig.type == "2X") {
1815 int ii = phasebiasSat->NumberOfPhaseBiases;
1816 if (ii >= CLOCKORBIT_NUMBIAS)
1817 break;
1818 phasebiasSat->NumberOfPhaseBiases += 1;
1819 phasebiasSat->Biases[ii].Type = CODETYPEQZSS_L2C_ML;
1820 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1821 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
1822 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1823 pbSig.wlIndicator;
1824 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1825 pbSig.discontinuityCounter;
1826 }
1827 else if (pbSig.type == "5I") {
1828 int ii = phasebiasSat->NumberOfPhaseBiases;
1829 if (ii >= CLOCKORBIT_NUMBIAS)
1830 break;
1831 phasebiasSat->NumberOfPhaseBiases += 1;
1832 phasebiasSat->Biases[ii].Type = CODETYPEQZSS_L5_I;
1833 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1834 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
1835 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1836 pbSig.wlIndicator;
1837 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1838 pbSig.discontinuityCounter;
1839 }
1840 else if (pbSig.type == "5Q") {
1841 int ii = phasebiasSat->NumberOfPhaseBiases;
1842 if (ii >= CLOCKORBIT_NUMBIAS)
1843 break;
1844 phasebiasSat->NumberOfPhaseBiases += 1;
1845 phasebiasSat->Biases[ii].Type = CODETYPEQZSS_L5_Q;
1846 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1847 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
1848 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1849 pbSig.wlIndicator;
1850 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1851 pbSig.discontinuityCounter;
1852 }
1853 else if (pbSig.type == "5X") {
1854 int ii = phasebiasSat->NumberOfPhaseBiases;
1855 if (ii >= CLOCKORBIT_NUMBIAS)
1856 break;
1857 phasebiasSat->NumberOfPhaseBiases += 1;
1858 phasebiasSat->Biases[ii].Type = CODETYPEQZSS_L5_IQ;
1859 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1860 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
1861 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1862 pbSig.wlIndicator;
1863 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1864 pbSig.discontinuityCounter;
1865 }
1866 else if (pbSig.type == "6S") {
1867 int ii = phasebiasSat->NumberOfPhaseBiases;
1868 if (ii >= CLOCKORBIT_NUMBIAS)
1869 break;
1870 phasebiasSat->NumberOfPhaseBiases += 1;
1871 phasebiasSat->Biases[ii].Type = CODETYPEQZSS_LEX_S;
1872 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1873 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
1874 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1875 pbSig.wlIndicator;
1876 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1877 pbSig.discontinuityCounter;
1878 }
1879 else if (pbSig.type == "6L") {
1880 int ii = phasebiasSat->NumberOfPhaseBiases;
1881 if (ii >= CLOCKORBIT_NUMBIAS)
1882 break;
1883 phasebiasSat->NumberOfPhaseBiases += 1;
1884 phasebiasSat->Biases[ii].Type = CODETYPEQZSS_LEX_L;
1885 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1886 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
1887 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1888 pbSig.wlIndicator;
1889 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1890 pbSig.discontinuityCounter;
1891 }
1892 else if (pbSig.type == "6X") {
1893 int ii = phasebiasSat->NumberOfPhaseBiases;
1894 if (ii >= CLOCKORBIT_NUMBIAS)
1895 break;
1896 phasebiasSat->NumberOfPhaseBiases += 1;
1897 phasebiasSat->Biases[ii].Type = CODETYPEQZSS_LEX_SL;
1898 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1899 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
1900 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1901 pbSig.wlIndicator;
1902 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1903 pbSig.discontinuityCounter;
1904 }
1905 }
1906 }
1907 if (prn.system() == 'S') {
1908 QListIterator<phaseBiasSignal> it(phaseBiasList);
1909 while (it.hasNext()) {
1910 const phaseBiasSignal &pbSig = it.next();
1911 if (pbSig.type == "1C") {
1912 int ii = phasebiasSat->NumberOfPhaseBiases;
1913 if (ii >= CLOCKORBIT_NUMBIAS)
1914 break;
1915 phasebiasSat->NumberOfPhaseBiases += 1;
1916 phasebiasSat->Biases[ii].Type = CODETYPE_SBAS_L1_CA;
1917 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1918 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
1919 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1920 pbSig.wlIndicator;
1921 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1922 pbSig.discontinuityCounter;
1923 }
1924 else if (pbSig.type == "5I") {
1925 int ii = phasebiasSat->NumberOfPhaseBiases;
1926 if (ii >= CLOCKORBIT_NUMBIAS)
1927 break;
1928 phasebiasSat->NumberOfPhaseBiases += 1;
1929 phasebiasSat->Biases[ii].Type = CODETYPE_SBAS_L5_I;
1930 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1931 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
1932 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1933 pbSig.wlIndicator;
1934 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1935 pbSig.discontinuityCounter;
1936 }
1937 else if (pbSig.type == "5Q") {
1938 int ii = phasebiasSat->NumberOfPhaseBiases;
1939 if (ii >= CLOCKORBIT_NUMBIAS)
1940 break;
1941 phasebiasSat->NumberOfPhaseBiases += 1;
1942 phasebiasSat->Biases[ii].Type = CODETYPE_SBAS_L5_Q;
1943 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1944 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
1945 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1946 pbSig.wlIndicator;
1947 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1948 pbSig.discontinuityCounter;
1949 }
1950 else if (pbSig.type == "5X") {
1951 int ii = phasebiasSat->NumberOfPhaseBiases;
1952 if (ii >= CLOCKORBIT_NUMBIAS)
1953 break;
1954 phasebiasSat->NumberOfPhaseBiases += 1;
1955 phasebiasSat->Biases[ii].Type = CODETYPE_SBAS_L5_IQ;
1956 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1957 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
1958 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1959 pbSig.wlIndicator;
1960 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1961 pbSig.discontinuityCounter;
1962 }
1963 }
1964 }
1965 if (prn.system() == 'C') {
1966 QListIterator<phaseBiasSignal> it(phaseBiasList);
1967 while (it.hasNext()) {
1968 const phaseBiasSignal &pbSig = it.next();
1969 if (pbSig.type == "2I") {
1970 int ii = phasebiasSat->NumberOfPhaseBiases;
1971 if (ii >= CLOCKORBIT_NUMBIAS)
1972 break;
1973 phasebiasSat->NumberOfPhaseBiases += 1;
1974 phasebiasSat->Biases[ii].Type = CODETYPE_BDS_B1_I;
1975 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1976 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
1977 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1978 pbSig.wlIndicator;
1979 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1980 pbSig.discontinuityCounter;
1981 }
1982 else if (pbSig.type == "2Q") {
1983 int ii = phasebiasSat->NumberOfPhaseBiases;
1984 if (ii >= CLOCKORBIT_NUMBIAS)
1985 break;
1986 phasebiasSat->NumberOfPhaseBiases += 1;
1987 phasebiasSat->Biases[ii].Type = CODETYPE_BDS_B1_Q;
1988 phasebiasSat->Biases[ii].Bias = pbSig.bias;
1989 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
1990 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
1991 pbSig.wlIndicator;
1992 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
1993 pbSig.discontinuityCounter;
1994 }
1995 else if (pbSig.type == "2X") {
1996 int ii = phasebiasSat->NumberOfPhaseBiases;
1997 if (ii >= CLOCKORBIT_NUMBIAS)
1998 break;
1999 phasebiasSat->NumberOfPhaseBiases += 1;
2000 phasebiasSat->Biases[ii].Type = CODETYPE_BDS_B1_IQ;
2001 phasebiasSat->Biases[ii].Bias = pbSig.bias;
2002 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
2003 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
2004 pbSig.wlIndicator;
2005 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
2006 pbSig.discontinuityCounter;
2007 }
2008 else if (pbSig.type == "6I") {
2009 int ii = phasebiasSat->NumberOfPhaseBiases;
2010 if (ii >= CLOCKORBIT_NUMBIAS)
2011 break;
2012 phasebiasSat->NumberOfPhaseBiases += 1;
2013 phasebiasSat->Biases[ii].Type = CODETYPE_BDS_B3_I;
2014 phasebiasSat->Biases[ii].Bias = pbSig.bias;
2015 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
2016 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
2017 pbSig.wlIndicator;
2018 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
2019 pbSig.discontinuityCounter;
2020 }
2021 else if (pbSig.type == "6Q") {
2022 int ii = phasebiasSat->NumberOfPhaseBiases;
2023 if (ii >= CLOCKORBIT_NUMBIAS)
2024 break;
2025 phasebiasSat->NumberOfPhaseBiases += 1;
2026 phasebiasSat->Biases[ii].Type = CODETYPE_BDS_B3_Q;
2027 phasebiasSat->Biases[ii].Bias = pbSig.bias;
2028 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
2029 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
2030 pbSig.wlIndicator;
2031 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
2032 pbSig.discontinuityCounter;
2033 }
2034 else if (pbSig.type == "6X") {
2035 int ii = phasebiasSat->NumberOfPhaseBiases;
2036 if (ii >= CLOCKORBIT_NUMBIAS)
2037 break;
2038 phasebiasSat->NumberOfPhaseBiases += 1;
2039 phasebiasSat->Biases[ii].Type = CODETYPE_BDS_B3_IQ;
2040 phasebiasSat->Biases[ii].Bias = pbSig.bias;
2041 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
2042 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
2043 pbSig.wlIndicator;
2044 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
2045 pbSig.discontinuityCounter;
2046 }
2047 else if (pbSig.type == "7I") {
2048 int ii = phasebiasSat->NumberOfPhaseBiases;
2049 if (ii >= CLOCKORBIT_NUMBIAS)
2050 break;
2051 phasebiasSat->NumberOfPhaseBiases += 1;
2052 phasebiasSat->Biases[ii].Type = CODETYPE_BDS_B2_I;
2053 phasebiasSat->Biases[ii].Bias = pbSig.bias;
2054 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
2055 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
2056 pbSig.wlIndicator;
2057 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
2058 pbSig.discontinuityCounter;
2059 }
2060 else if (pbSig.type == "7Q") {
2061 int ii = phasebiasSat->NumberOfPhaseBiases;
2062 if (ii >= CLOCKORBIT_NUMBIAS)
2063 break;
2064 phasebiasSat->NumberOfPhaseBiases += 1;
2065 phasebiasSat->Biases[ii].Type = CODETYPE_BDS_B2_Q;
2066 phasebiasSat->Biases[ii].Bias = pbSig.bias;
2067 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
2068 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
2069 pbSig.wlIndicator;
2070 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
2071 pbSig.discontinuityCounter;
2072 }
2073 else if (pbSig.type == "7X") {
2074 int ii = phasebiasSat->NumberOfPhaseBiases;
2075 if (ii >= CLOCKORBIT_NUMBIAS)
2076 break;
2077 phasebiasSat->NumberOfPhaseBiases += 1;
2078 phasebiasSat->Biases[ii].Type = CODETYPE_BDS_B2_IQ;
2079 phasebiasSat->Biases[ii].Bias = pbSig.bias;
2080 phasebiasSat->Biases[ii].SignalIntegerIndicator = pbSig.integerIndicator;
2081 phasebiasSat->Biases[ii].SignalsWideLaneIntegerIndicator =
2082 pbSig.wlIndicator;
2083 phasebiasSat->Biases[ii].SignalDiscontinuityCounter =
2084 pbSig.discontinuityCounter;
2085 }
2086 }
2087 }
2088 }
2089 }
2090 }
2091
2092 QByteArray hlpBufferCo;
2093
2094 // Orbit and Clock Corrections together
2095 // ------------------------------------
2096 if (_samplRtcmEphCorr == 0.0) {
2097 if (co.NumberOfSat[CLOCKORBIT_SATGPS] > 0
2098 || co.NumberOfSat[CLOCKORBIT_SATGLONASS] > 0
2099 || co.NumberOfSat[CLOCKORBIT_SATGALILEO] > 0
2100 || co.NumberOfSat[CLOCKORBIT_SATQZSS] > 0
2101 || co.NumberOfSat[CLOCKORBIT_SATSBAS] > 0
2102 || co.NumberOfSat[CLOCKORBIT_SATBDS] > 0) {
2103 char obuffer[CLOCKORBIT_BUFFERSIZE];
2104 int len = MakeClockOrbit(&co, COTYPE_AUTO, 0, obuffer, sizeof(obuffer));
2105 if (len > 0) {
2106 hlpBufferCo = QByteArray(obuffer, len);
2107 }
2108 }
2109 }
2110
2111 // Orbit and Clock Corrections separately
2112 // --------------------------------------
2113 else {
2114 if (co.NumberOfSat[CLOCKORBIT_SATGPS] > 0) {
2115 char obuffer[CLOCKORBIT_BUFFERSIZE];
2116 if (fmod(epoTime.gpssec(), _samplRtcmEphCorr) == 0.0) {
2117 co.UpdateInterval = ephUpdInd;
2118 int len1 = MakeClockOrbit(&co, COTYPE_GPSORBIT, 1, obuffer,
2119 sizeof(obuffer));
2120 co.UpdateInterval = clkUpdInd;
2121 if (len1 > 0) {
2122 hlpBufferCo += QByteArray(obuffer, len1);
2123 }
2124 }
2125 int mmsg = (co.NumberOfSat[CLOCKORBIT_SATGLONASS] > 0) ? 1 : 0;
2126 int len2 = MakeClockOrbit(&co, COTYPE_GPSCLOCK, mmsg, obuffer,
2127 sizeof(obuffer));
2128 if (len2 > 0) {
2129 hlpBufferCo += QByteArray(obuffer, len2);
2130 }
2131 }
2132 if (co.NumberOfSat[CLOCKORBIT_SATGLONASS] > 0) {
2133 char obuffer[CLOCKORBIT_BUFFERSIZE];
2134 if (fmod(epoTime.gpssec(), _samplRtcmEphCorr) == 0.0) {
2135 co.UpdateInterval = ephUpdInd;
2136 int len1 = MakeClockOrbit(&co, COTYPE_GLONASSORBIT, 1, obuffer,
2137 sizeof(obuffer));
2138 co.UpdateInterval = clkUpdInd;
2139 if (len1 > 0) {
2140 hlpBufferCo += QByteArray(obuffer, len1);
2141 }
2142 }
2143 int mmsg = (co.NumberOfSat[CLOCKORBIT_SATGALILEO] > 0) ? 1 : 0;
2144 int len2 = MakeClockOrbit(&co, COTYPE_GLONASSCLOCK, mmsg, obuffer,
2145 sizeof(obuffer));
2146 if (len2 > 0) {
2147 hlpBufferCo += QByteArray(obuffer, len2);
2148 }
2149 }
2150 if (co.NumberOfSat[CLOCKORBIT_SATGALILEO] > 0) {
2151 char obuffer[CLOCKORBIT_BUFFERSIZE];
2152 if (fmod(epoTime.gpssec(), _samplRtcmEphCorr) == 0.0) {
2153 co.UpdateInterval = ephUpdInd;
2154 int len1 = MakeClockOrbit(&co, COTYPE_GALILEOORBIT, 1, obuffer,
2155 sizeof(obuffer));
2156 co.UpdateInterval = clkUpdInd;
2157 if (len1 > 0) {
2158 hlpBufferCo += QByteArray(obuffer, len1);
2159 }
2160 }
2161 int mmsg = (co.NumberOfSat[CLOCKORBIT_SATQZSS] > 0) ? 1 : 0;
2162 int len2 = MakeClockOrbit(&co, COTYPE_GALILEOCLOCK, mmsg, obuffer,
2163 sizeof(obuffer));
2164 if (len2 > 0) {
2165 hlpBufferCo += QByteArray(obuffer, len2);
2166 }
2167 }
2168 if (co.NumberOfSat[CLOCKORBIT_SATQZSS] > 0) {
2169 char obuffer[CLOCKORBIT_BUFFERSIZE];
2170 if (fmod(epoTime.gpssec(), _samplRtcmEphCorr) == 0.0) {
2171 co.UpdateInterval = ephUpdInd;
2172 int len1 = MakeClockOrbit(&co, COTYPE_QZSSORBIT, 1, obuffer,
2173 sizeof(obuffer));
2174 co.UpdateInterval = clkUpdInd;
2175 if (len1 > 0) {
2176 hlpBufferCo += QByteArray(obuffer, len1);
2177 }
2178 }
2179 int mmsg = (co.NumberOfSat[CLOCKORBIT_SATSBAS] > 0) ? 1 : 0;
2180 int len2 = MakeClockOrbit(&co, COTYPE_QZSSCLOCK, mmsg, obuffer,
2181 sizeof(obuffer));
2182 if (len2 > 0) {
2183 hlpBufferCo += QByteArray(obuffer, len2);
2184 }
2185 }
2186 if (co.NumberOfSat[CLOCKORBIT_SATSBAS] > 0) {
2187 char obuffer[CLOCKORBIT_BUFFERSIZE];
2188 if (fmod(epoTime.gpssec(), _samplRtcmEphCorr) == 0.0) {
2189 co.UpdateInterval = ephUpdInd;
2190 int len1 = MakeClockOrbit(&co, COTYPE_SBASORBIT, 1, obuffer,
2191 sizeof(obuffer));
2192 co.UpdateInterval = clkUpdInd;
2193 if (len1 > 0) {
2194 hlpBufferCo += QByteArray(obuffer, len1);
2195 }
2196 }
2197 int mmsg = (co.NumberOfSat[CLOCKORBIT_SATBDS] > 0) ? 1 : 0;
2198 int len2 = MakeClockOrbit(&co, COTYPE_SBASCLOCK, mmsg, obuffer,
2199 sizeof(obuffer));
2200 if (len2 > 0) {
2201 hlpBufferCo += QByteArray(obuffer, len2);
2202 }
2203 }
2204 if (co.NumberOfSat[CLOCKORBIT_SATBDS] > 0) {
2205 char obuffer[CLOCKORBIT_BUFFERSIZE];
2206 if (fmod(epoTime.gpssec(), _samplRtcmEphCorr) == 0.0) {
2207 co.UpdateInterval = ephUpdInd;
2208 int len1 = MakeClockOrbit(&co, COTYPE_BDSORBIT, 1, obuffer,
2209 sizeof(obuffer));
2210 co.UpdateInterval = clkUpdInd;
2211 if (len1 > 0) {
2212 hlpBufferCo += QByteArray(obuffer, len1);
2213 }
2214 }
2215 int len2 = MakeClockOrbit(&co, COTYPE_BDSCLOCK, 0, obuffer,
2216 sizeof(obuffer));
2217 if (len2 > 0) {
2218 hlpBufferCo += QByteArray(obuffer, len2);
2219 }
2220 }
2221 }
2222
2223 // Code Biases
2224 // -----------
2225 QByteArray hlpBufferBias;
2226 if (bias.NumberOfSat[CLOCKORBIT_SATGPS] > 0
2227 || bias.NumberOfSat[CLOCKORBIT_SATGLONASS] > 0
2228 || bias.NumberOfSat[CLOCKORBIT_SATGALILEO] > 0
2229 || bias.NumberOfSat[CLOCKORBIT_SATQZSS] > 0
2230 || bias.NumberOfSat[CLOCKORBIT_SATSBAS] > 0
2231 || bias.NumberOfSat[CLOCKORBIT_SATBDS] > 0) {
2232 char obuffer[CLOCKORBIT_BUFFERSIZE];
2233 int len = MakeCodeBias(&bias, BTYPE_AUTO, 0, obuffer, sizeof(obuffer));
2234 if (len > 0) {
2235 hlpBufferBias = QByteArray(obuffer, len);
2236 }
2237 }
2238
2239 // Phase Biases
2240 // ------------
2241 QByteArray hlpBufferPhaseBias;
2242 if (phasebias.NumberOfSat[CLOCKORBIT_SATGPS] > 0
2243 || phasebias.NumberOfSat[CLOCKORBIT_SATGLONASS] > 0
2244 || phasebias.NumberOfSat[CLOCKORBIT_SATGALILEO] > 0
2245 || phasebias.NumberOfSat[CLOCKORBIT_SATQZSS] > 0
2246 || phasebias.NumberOfSat[CLOCKORBIT_SATSBAS] > 0
2247 || phasebias.NumberOfSat[CLOCKORBIT_SATBDS] > 0) {
2248 char obuffer[CLOCKORBIT_BUFFERSIZE];
2249 int len = MakePhaseBias(&phasebias, PBTYPE_AUTO, 0, obuffer,
2250 sizeof(obuffer));
2251 if (len > 0) {
2252 hlpBufferPhaseBias = QByteArray(obuffer, len);
2253 }
2254 }
2255
2256 // VTEC
2257 // ----
2258 QByteArray hlpBufferVtec;
2259 if (vtec.NumLayers > 0) {
2260 char obuffer[CLOCKORBIT_BUFFERSIZE];
2261 int len = MakeVTEC(&vtec, 0, obuffer, sizeof(obuffer));
2262 if (len > 0) {
2263 hlpBufferVtec = QByteArray(obuffer, len);
2264 }
2265 }
2266
2267 _outBuffer += hlpBufferCo + hlpBufferBias + hlpBufferPhaseBias
2268 + hlpBufferVtec;
2269}
2270
2271//
2272////////////////////////////////////////////////////////////////////////////
2273void bncRtnetUploadCaster::processSatellite(const t_eph* eph, int GPSweek,
2274 double GPSweeks, const QString& prn, const ColumnVector& rtnAPC,
2275 double rtnClk, const ColumnVector& rtnVel, const ColumnVector& rtnCoM,
2276 struct ClockOrbit::SatData* sd, QString& outLine) {
2277
2278 // Broadcast Position and Velocity
2279 // -------------------------------
2280 ColumnVector xB(4);
2281 ColumnVector vB(3);
2282 eph->getCrd(bncTime(GPSweek, GPSweeks), xB, vB, false);
2283
2284 // Precise Position
2285 // ----------------
2286 ColumnVector xP = _CoM ? rtnCoM : rtnAPC;
2287
2288 double dc = 0.0;
2289 //TODO: the following 3 lines can be activated again if all parameters are updated regarding ITRF2014
2290 //if (_crdTrafo != "IGS14") {
2291 // crdTrafo(GPSweek, xP, dc);
2292 //}
2293 //TODO: the following 3 lines can be deleted if all parameters are updated regarding ITRF2014
2294 if (_crdTrafo == "ETRF2000") {
2295 crdTrafo8(GPSweek, xP, dc);
2296 crdTrafo(GPSweek, xP, dc);
2297 }
2298 else if (_crdTrafo == "NAD83") {
2299 crdTrafo8(GPSweek, xP, dc);
2300 crdTrafo(GPSweek, xP, dc);
2301 }
2302 else if (_crdTrafo == "DREF91") {
2303 crdTrafo8(GPSweek, xP, dc);
2304 crdTrafo(GPSweek, xP, dc);
2305 }
2306 else if (_crdTrafo == "SIRGAS2000" ||
2307 _crdTrafo == "GDA2020") {
2308 crdTrafo(GPSweek, xP, dc);
2309 }
2310
2311 // Difference in xyz
2312 // -----------------
2313 ColumnVector dx = xB.Rows(1, 3) - xP;
2314 ColumnVector dv = vB - rtnVel;
2315
2316 // Difference in RSW
2317 // -----------------
2318 ColumnVector rsw(3);
2319 XYZ_to_RSW(xB.Rows(1, 3), vB, dx, rsw);
2320
2321 ColumnVector dotRsw(3);
2322 XYZ_to_RSW(xB.Rows(1, 3), vB, dv, dotRsw);
2323
2324 // Clock Correction
2325 // ----------------
2326 double dClk = rtnClk - (xB(4) - dc) * t_CST::c;
2327
2328 if (sd) {
2329 sd->ID = prn.mid(1).toInt();
2330 sd->IOD = eph->IOD();
2331 sd->Clock.DeltaA0 = dClk;
2332 sd->Clock.DeltaA1 = 0.0; // TODO
2333 sd->Clock.DeltaA2 = 0.0; // TODO
2334 sd->Orbit.DeltaRadial = rsw(1);
2335 sd->Orbit.DeltaAlongTrack = rsw(2);
2336 sd->Orbit.DeltaCrossTrack = rsw(3);
2337 sd->Orbit.DotDeltaRadial = dotRsw(1);
2338 sd->Orbit.DotDeltaAlongTrack = dotRsw(2);
2339 sd->Orbit.DotDeltaCrossTrack = dotRsw(3);
2340 }
2341
2342 outLine.sprintf("%d %.1f %s %u %10.3f %8.3f %8.3f %8.3f\n", GPSweek,
2343 GPSweeks, eph->prn().toString().c_str(), eph->IOD(), dClk, rsw(1), rsw(2),
2344 rsw(3));
2345
2346 double relativity = -2.0 * DotProduct(xP, rtnVel) / t_CST::c;
2347 double sp3Clk = (rtnClk - relativity) / t_CST::c; // in seconds
2348
2349 if (_rnx) {
2350 _rnx->write(GPSweek, GPSweeks, prn, sp3Clk);
2351 }
2352 if (_sp3) {
2353 _sp3->write(GPSweek, GPSweeks, prn, rtnCoM, sp3Clk);
2354 }
2355}
2356
2357// Transform Coordinates
2358////////////////////////////////////////////////////////////////////////////
2359void bncRtnetUploadCaster::crdTrafo(int GPSWeek, ColumnVector& xyz,
2360 double& dc) {
2361
2362 // Current epoch minus 2000.0 in years
2363 // ------------------------------------
2364 double dt = (GPSWeek - (1042.0 + 6.0 / 7.0)) / 365.2422 * 7.0 + 2000.0 - _t0;
2365
2366 ColumnVector dx(3);
2367
2368 dx(1) = _dx + dt * _dxr;
2369 dx(2) = _dy + dt * _dyr;
2370 dx(3) = _dz + dt * _dzr;
2371
2372 static const double arcSec = 180.0 * 3600.0 / M_PI;
2373
2374 double ox = (_ox + dt * _oxr) / arcSec;
2375 double oy = (_oy + dt * _oyr) / arcSec;
2376 double oz = (_oz + dt * _ozr) / arcSec;
2377
2378 double sc = 1.0 + _sc * 1e-9 + dt * _scr * 1e-9;
2379
2380 // Specify approximate center of area
2381 // ----------------------------------
2382 ColumnVector meanSta(3);
2383
2384 if (_crdTrafo == "ETRF2000") {
2385 meanSta(1) = 3661090.0;
2386 meanSta(2) = 845230.0;
2387 meanSta(3) = 5136850.0;
2388 }
2389 else if (_crdTrafo == "NAD83") {
2390 meanSta(1) = -1092950.0;
2391 meanSta(2) = -4383600.0;
2392 meanSta(3) = 4487420.0;
2393 }
2394 else if (_crdTrafo == "GDA2020") {
2395 meanSta(1) = -4052050.0;
2396 meanSta(2) = 4212840.0;
2397 meanSta(3) = -2545110.0;
2398 }
2399 else if (_crdTrafo == "SIRGAS2000") {
2400 meanSta(1) = 3740860.0;
2401 meanSta(2) = -4964290.0;
2402 meanSta(3) = -1425420.0;
2403 }
2404 else if (_crdTrafo == "DREF91") {
2405 meanSta(1) = 3959579.0;
2406 meanSta(2) = 721719.0;
2407 meanSta(3) = 4931539.0;
2408 }
2409 else if (_crdTrafo == "Custom") {
2410 meanSta(1) = 0.0; // TODO
2411 meanSta(2) = 0.0; // TODO
2412 meanSta(3) = 0.0; // TODO
2413 }
2414 // TODO: has to be deleted as soon all parameters are available with respect to ITRF2014
2415 else if (_crdTrafo == "ITRF2008") {
2416 meanSta(1) = 0.0; // TODO
2417 meanSta(2) = 0.0; // TODO
2418 meanSta(3) = 0.0; // TODO
2419 }
2420
2421 // Clock correction proportional to topocentric distance to satellites
2422 // -------------------------------------------------------------------
2423 double rho = (xyz - meanSta).norm_Frobenius();
2424 dc = rho * (sc - 1.0) / sc / t_CST::c;
2425
2426 Matrix rMat(3, 3);
2427 rMat(1, 1) = 1.0;
2428 rMat(1, 2) = -oz;
2429 rMat(1, 3) = oy;
2430 rMat(2, 1) = oz;
2431 rMat(2, 2) = 1.0;
2432 rMat(2, 3) = -ox;
2433 rMat(3, 1) = -oy;
2434 rMat(3, 2) = ox;
2435 rMat(3, 3) = 1.0;
2436
2437 xyz = sc * rMat * xyz + dx;
2438}
2439
2440// Transform Coordinates
2441////////////////////////////////////////////////////////////////////////////
2442void bncRtnetUploadCaster::crdTrafo8(int GPSWeek, ColumnVector& xyz,
2443 double& dc) {
2444
2445 // Current epoch minus 2000.0 in years
2446 // ------------------------------------
2447 double dt = (GPSWeek - (1042.0 + 6.0 / 7.0)) / 365.2422 * 7.0 + 2000.0 - _t0;
2448
2449 ColumnVector dx(3);
2450
2451 dx(1) = _dx8 + dt * _dxr8;
2452 dx(2) = _dy8 + dt * _dyr8;
2453 dx(3) = _dz8 + dt * _dzr8;
2454
2455 static const double arcSec = 180.0 * 3600.0 / M_PI;
2456
2457 double ox = (_ox8 + dt * _oxr8) / arcSec;
2458 double oy = (_oy8 + dt * _oyr8) / arcSec;
2459 double oz = (_oz8 + dt * _ozr8) / arcSec;
2460
2461 double sc = 1.0 + _sc8 * 1e-9 + dt * _scr8 * 1e-9;
2462
2463 // Specify approximate center of area
2464 // ----------------------------------
2465 ColumnVector meanSta(3);
2466 meanSta(1) = 0.0; // TODO
2467 meanSta(2) = 0.0; // TODO
2468 meanSta(3) = 0.0; // TODO
2469
2470
2471 // Clock correction proportional to topocentric distance to satellites
2472 // -------------------------------------------------------------------
2473 double rho = (xyz - meanSta).norm_Frobenius();
2474 dc = rho * (sc - 1.0) / sc / t_CST::c;
2475
2476 Matrix rMat(3, 3);
2477 rMat(1, 1) = 1.0;
2478 rMat(1, 2) = -oz;
2479 rMat(1, 3) = oy;
2480 rMat(2, 1) = oz;
2481 rMat(2, 2) = 1.0;
2482 rMat(2, 3) = -ox;
2483 rMat(3, 1) = -oy;
2484 rMat(3, 2) = ox;
2485 rMat(3, 3) = 1.0;
2486
2487 xyz = sc * rMat * xyz + dx;
2488}
2489
2490int bncRtnetUploadCaster::determineUpdateInd(double samplingRate) {
2491
2492 if (samplingRate == 10.0) {
2493 return 3;
2494 }
2495 else if (samplingRate == 15.0) {
2496 return 4;
2497 }
2498 else if (samplingRate == 30.0) {
2499 return 5;
2500 }
2501 else if (samplingRate == 60.0) {
2502 return 6;
2503 }
2504 else if (samplingRate == 120.0) {
2505 return 7;
2506 }
2507 else if (samplingRate == 240.0) {
2508 return 8;
2509 }
2510 else if (samplingRate == 300.0) {
2511 return 9;
2512 }
2513 else if (samplingRate == 600.0) {
2514 return 10;
2515 }
2516 else if (samplingRate == 900.0) {
2517 return 11;
2518 }
2519 else if (samplingRate == 1800.0) {
2520 return 12;
2521 }
2522 else if (samplingRate == 3600.0) {
2523 return 13;
2524 }
2525 else if (samplingRate == 7200.0) {
2526 return 14;
2527 }
2528 else if (samplingRate == 10800.0) {
2529 return 15;
2530 }
2531 return 2; // default
2532}
Note: See TracBrowser for help on using the repository browser.