70 correlationFlag =
false;
73 sdev[0] = sdev[1] = sdev[2] = sdev[3] = 0;
74 sig[0] = sig[1] = sig[2] = sig[3] = 0;
75 correlation[0] = correlation[1] = correlation[2]
76 = correlation[3] = correlation[4] = correlation[5] = 0;
84 bool unexpectedEOF=
false;
98 else if(strm.
lastLine.substr(0,3) == string(
"EOF")) {
105 FFStreamError ffse(
"EOF was found immediately after epoch line");
110 if(status > 1)
break;
117 catch(EndOfFile&
err) {
122 FFStreamError
err(
"EOF text found, followed by: " + strm.
lastLine);
134 FFStreamError ffse(
"Consecutive epoch records found");
139 if(status > 1)
break;
149 strm.
warnings.push_back(
string(
"Warning (SP3 std): short epoch line: ")
154 FFStreamError
err(
"Invalid line length "
172 FFStreamError fe(
"Invalid time in:" + strm.
lastLine);
182 if(status > 0)
break;
194 if ((!isVerC && strm.
lastLine.size() < 60) ||
195 (isVerC && strm.
lastLine.size() < 80) ) {
196 FFStreamError
err(
"Invalid line length ("
212 if (isVerA && (RecType ==
'P')
228 clockEventFlag = clockPredFlag
229 = orbitManeuverFlag = orbitPredFlag =
false;
230 if(strm.
lastLine[74] ==
'E') clockEventFlag =
true;
231 if(strm.
lastLine[75] ==
'P') clockPredFlag =
true;
232 if(strm.
lastLine[78] ==
'M') orbitManeuverFlag =
true;
233 if(strm.
lastLine[79] ==
'P') orbitPredFlag =
true;
243 if(status != 2 || strm.
lastLine[1] != RecType) {
244 Exception e(
"correlation EP|V record mismatched with previous record");
253 FFStreamError
err(
"Invalid SP3c correlation line length ("
272 correlationFlag =
true;
276 FFStreamError
err(
"Unknown record label " + strm.
lastLine.substr(0,2));
284 strm.
warnings.push_back(
string(
"Warning (SP3 std): Unexpected EOF"));
290 strm.clear(ios::eofbit);
298 catch(FFStreamError&
err) {
299 string what =
err.what().substr(0,21);
303 if(what ==
string(
"text 0:Unexpected EOF")) {
304 unexpectedEOF =
true;
307 if(strm.
lastLine.size() < 3) status = 3;
315 if(status == 3)
break;
339 line += civTime.
printf(
" %4Y %2m %2d %2H %2M");
348 FFStreamError fse(
"Cannot output non-GPS to SP3a");
354 line +=
static_cast<SP3SatID>(sat).toString();
363 && (RecType ==
'P') && eventFlag)
365 line += string(14,
' ');
377 line += (clockEventFlag ? string(
"E") : string(
" "));
378 line += (clockPredFlag ? string(
"P") : string(
" "));
380 line += (orbitManeuverFlag ? string(
"M") : string(
" "));
381 line += (orbitPredFlag ? string(
"P") : string(
" "));
387 if(isVerC && correlationFlag) {
390 strm << line << endl;
402 for(
int i=0; i<6; i++)
408 strm << line << endl;
416 s << RecType <<
" " <<
static_cast<SP3SatID>(sat).toString() <<
" "
417 << (
static_cast<CivilTime>(
time)).printf(
"%Y/%02m/%02d %2H:%02M:%06.3f")
422 s << fixed << setprecision(6)
423 <<
" X=" << setw(14) << x[0]
424 <<
" Y=" << setw(14) << x[1]
425 <<
" Z=" << setw(14) << x[2]
426 <<
" C=" << setw(14) << clk;
429 s <<
" sX=" << setw(2) << sig[0]
430 <<
" sY=" << setw(2) << sig[1]
431 <<
" sZ=" << setw(2) << sig[2]
432 <<
" sC=" << setw(3) << sig[3];
435 s <<
" " << (clockEventFlag ?
"clockEvent" :
"-")
436 <<
" " << (clockPredFlag ?
"clockPrediction" :
"-")
437 <<
" " << (orbitManeuverFlag ?
"orbitManeuver" :
"-")
438 <<
" " << (orbitPredFlag ?
"orbitPrediction" :
"-");
442 <<
" and E" << RecType
443 <<
" cXX=" << setw(4) << sdev[0]
444 <<
" cYY=" << setw(4) << sdev[1]
445 <<
" cZZ=" << setw(4) << sdev[2]
446 <<
" cCC=" << setw(7) << sdev[3]
447 <<
" cXY=" << setw(8) << correlation[0]
448 <<
" cXZ=" << setw(8) << correlation[1]
449 <<
" cXC=" << setw(8) << correlation[2]
450 <<
" cYZ=" << setw(8) << correlation[3]
451 <<
" cYC=" << setw(8) << correlation[4]
452 <<
" cZC=" << setw(8) << correlation[5];