61 && (rod.
numSVs==0 || rod.
obs.empty()) )
return;
71 line = string(26,
' ');
75 line = string(1,
' ');
77 line += string(1,
' ');
79 line += string(1,
' ');
81 line += string(1,
' ');
83 line += string(1,
' ');
86 line += string(2,
' ');
92 const size_t maxPrnsPerLine = 12;
93 size_t satsWritten = 0;
95 Rinex3ObsData::DataMap::const_iterator itr(rod.
obs.begin());
99 while( itr != rod.
obs.end() && satsWritten < maxPrnsPerLine )
101 line += itr->first.toString();
109 line += string(68 - line.size(),
' ');
114 while( satsWritten != rod.
obs.size() )
116 if((satsWritten % maxPrnsPerLine) == 0)
118 strm << line << endl;
120 line = string(32,
' ');
122 line += itr->first.toString();
130 strm << line << endl;
139 catch(FFStreamError& e)
143 catch(StringException& e)
151 const int maxObsPerLine(5);
154 for( itr = rod.
obs.begin(); itr != rod.
obs.end(); ++itr )
174 vector<RinexObsID>::const_iterator jt;
175 jt = find(vecData.begin(), vecData.end(), obsid);
180 if( jt != vecData.end() )
181 ind = jt-vecData.begin();
184 if( obsWritten != 0 && (obsWritten % maxObsPerLine) == 0 )
186 strm << line << endl;
199 line += itr->second[ind].asString();
205 strm << line << endl;
226 DataMap::const_iterator i =
obs.find(svID);
229 InvalidRequest ir( svID.
toString() +
" is not available.");
232 if (index >= i->second.size())
238 return i->second[index];
243 const std::string& type,
248 if( type.size() == 3 )
272 if (
obs[svID].size() <= index)
273 obs[svID].resize(index+1);
277 double channel =
data.data;
291 if ((
obs[svID][index].
data < 100000000) &&
294 obs[svID][index].data *= 100;
298 obs[svID][index].data += fmod(channel, 100);
299 obs[svID][index].lliBlank =
obs[svID][index].ssiBlank =
true;
338 line += string(2,
' ');
341 line += string(6,
' ');
345 strm << line << endl;
351 DataMap::const_iterator itr =
obs.begin();
353 while(itr !=
obs.end())
355 line = itr->first.toString();
357 for(
size_t i=0; i < itr->second.size(); i++)
359 line += itr->second[i].asString();
362 strm << line << endl;
377 catch(FFStreamError& e)
381 catch(StringException& e)
400 if(line.size()>80 || line[0] !=
' ' || line[3] !=
' ' || line[6] !=
' ')
402 FFStreamError e(
"Bad epoch line: >" + line +
"<");
421 bool noEpochTime = (line.substr(0,26) == string(26,
' '));
425 FFStreamError e(
"Required epoch time missing: " + line);
429 rod.
time = previousTime;
436 if((line[0] !=
' ') || (line[3] !=
' ') || (line[6] !=
' ') ||
437 (line[9] !=
' ') || (line[12] !=
' ') || (line[15] !=
' '))
439 FFStreamError e(
"Invalid time format");
444 if(line.substr(0,26) ==
string(26,
' '))
459 sec =
asDouble(line.substr(15, 11));
471 if(ds != 0) rv.
second += ds;
477 catch(std::exception &e)
479 FFStreamError
err(
"std::exception: " +
string(e.what()));
484 FFStreamError
err(e);
490 previousTime = rod.
time;
497 if(line.size() > 68 )
506 int isv, ndx, line_ndx;
509 vector<RinexSatID> satIndex(rod.
numSVs);
510 for(isv=1, ndx=0; ndx<rod.
numSVs; isv++, ndx++)
519 FFStreamError
err(
"Invalid line size:" +
533 FFStreamError ffse(e);
542 for(isv=0; isv < rod.
numSVs; isv++)
546 vector<RinexDatum>
data;
548 for(ndx=0, line_ndx=0; ndx < numObs; ndx++, line_ndx++)
554 line.resize(80,
' ');
558 FFStreamError
err(
"Invalid line size:" +
567 if(R3ot !=
string(
" "))
569 RinexDatum tempData(line.substr(line_ndx*16, 16));
570 data.push_back(tempData);
582 for(
int i=0; i<rod.
numSVs; i++)
590 catch(FFStreamError& e)
594 catch(StringException& e)
638 if(line[0] !=
'>' || line[1] !=
' ')
640 FFStreamError e(
"Bad epoch line: >" + line +
"<");
645 if(epochFlag < 0 || epochFlag > 6)
663 vector<RinexSatID> satIndex(
numSVs);
664 map<RinexSatID, vector<RinexDatum> > tempDataMap;
666 for(
int isv = 0; isv <
numSVs; isv++)
678 FFStreamError ffse(e);
684 string gnss =
asString(satIndex[isv].systemChar());
693 size_t minSize = 3 + 16*size;
694 if(line.size() < minSize)
695 line += string(minSize-line.size(),
' ');
698 vector<RinexDatum>
data;
699 for(
int i = 0; i < size; i++)
701 size_t pos = 3 + 16*i;
703 data.push_back(tempData);
713 for(
int i = 0; i <
numSVs; i++)
721 catch(FFStreamError& e)
725 catch(StringException& e)
750 if( (line[ 1] !=
' ') || (line[ 6] !=
' ') || (line[ 9] !=
' ') ||
751 (line[12] !=
' ') || (line[15] !=
' ') || (line[18] !=
' ') ||
752 (line[29] !=
' ') || (line[30] !=
' '))
754 FFStreamError e(
"Invalid time format");
759 if(line.substr(2,27) ==
string(27,
' '))
770 sec =
asDouble(line.substr(19, 11));
781 if(ds != 0) rv += ds;
788 catch (std::exception &e)
790 FFStreamError
err(
"std::exception: " +
string(e.what()));
795 FFStreamError
err(e);
803 return string(26,
' ');
808 line = string(1,
' ');
810 line += string(1,
' ');
812 line += string(1,
' ');
814 line += string(1,
' ');
816 line += string(1,
' ');
836 << fixed << setprecision(9) <<
" clk offset: " <<
clockOffset << endl;
840 DataMap::const_iterator jt;
841 for(jt =
obs.begin(); jt !=
obs.end(); jt++)
843 s <<
" " << (jt->first).toString() <<
":" << fixed
845 for(
size_t i = 0; i < jt->second.size(); i++)
847 s <<
" " << setw(12) << jt->second[i].data
848 <<
"/" << jt->second[i].lli <<
"/" << jt->second[i].ssi;
855 s <<
"aux. header info:\n";
863 os <<
"Dump of Rinex3ObsData: "
864 <<
printTime(
time,
"%4F/%w/%10.3g = %04Y/%02m/%02d %02H:%02M:%02S")
866 << fixed << setprecision(6) <<
" clk " <<
clockOffset;
870 os <<
" : EMPTY" << endl;
877 os <<
"Auxiliary header:\n";
882 for(DataMap::const_iterator jt=
obs.begin(); jt !=
obs.end(); jt++)
885 const vector<RinexObsID>
887 os <<
" " << sat.
toString() << fixed << setprecision(3);
888 for(
size_t i=0; i<jt->second.size(); i++)
889 os <<
" " << setw(13) << jt->second[i].data
890 <<
"/" << jt->second[i].lli
891 <<
"/" << jt->second[i].ssi
892 <<
"/" << types[i].asString()