Changeset 11047 in ntrip for trunk/BNC/src/satObs.cpp


Ignore:
Timestamp:
Sep 28, 2026, 11:17:34 AM (11 hours ago)
Author:
stuerze
Message:

updates regarding RTCM-SSR and some ovarall improvements

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/BNC/src/satObs.cpp

    r11041 r11047  
    22#include <iomanip>
    33#include <sstream>
     4#include <cstdlib>
    45#include <newmatio.h>
    56
    … …  
    132133
    133134  e_ssrFormat ssrFormat = ssrUnknown;
     135
     136  // TEMPORARY BACKWARD COMPATIBILITY - remove later on:
     137  // .ssr files written before the SSR format line (a single integer) was
     138  // added after the "> ORBIT" epoch line don't have it - their first line
     139  // is already the first satellite. Such a line is kept (firstLine) and
     140  // processed as the first correction below, with ssrFormat unknown.
     141  // To revert: read the format line unconditionally again, i.e. drop the
     142  // "only one integer on the line" test and the firstLine handling in the
     143  // loop below.
     144  string firstLine;
     145  getline(inStream, firstLine);
    134146  {
    135     string line;
    136     getline(inStream, line);
    137     istringstream in(line.c_str());
    138     int ssrFormatInt = 0;
    139     if (in >> ssrFormatInt) {
     147    istringstream in(firstLine.c_str());
     148    int    ssrFormatInt = 0;
     149    string rest;
     150    if ((in >> ssrFormatInt) && !(in >> rest)) { // format line
    140151      ssrFormat = static_cast<e_ssrFormat>(ssrFormatInt);
     152      firstLine.clear();
    141153    }
    142154  }
    … …  
    150162
    151163    string line;
    152     getline(inStream, line);
     164    if (ii == 0 && !firstLine.empty()) { // TEMPORARY BACKWARD COMPATIBILITY, see above
     165      line = firstLine;
     166    }
     167    else {
     168      getline(inStream, line);
     169    }
    153170    istringstream in(line.c_str());
    154171
    … …  
    245262      *out << "> CODE_BIAS " << epoTime.datestr(' ') << ' ' << epoTime.timestr(1, ' ') << " "
    246263        << satCodeBias._updateInt << " "
    247         << biasList.size() << ' ' << satCodeBias._staID << endl;
     264        << biasList.size() << ' ' << satCodeBias._staID << ' '
     265        << satCodeBias._ssrIOD << ' ' << satCodeBias._ssrProviderID << endl;
    248266    }
    249267    *out << satCodeBias._prn.toString() << "   " << setw(2) << satCodeBias._bias.size();
    … …  
    268286    return;
    269287  }
     288  int ssrIOD, ssrProviderID;
     289  t_corrSSR::readSsrIOD(epoLine, ssrIOD, ssrProviderID);
    270290  for (int ii = 0; ii < numSat; ii++) {
    271291    t_satCodeBias satCodeBias;
    … …  
    273293    satCodeBias._updateInt = updateInt;
    274294    satCodeBias._staID = staID;
     295    satCodeBias._ssrIOD = ssrIOD;
     296    satCodeBias._ssrProviderID = ssrProviderID;
    275297
    276298    string line;
    … …  
    313335      *out << "> PHASE_BIAS " << epoTime.datestr(' ') << ' ' << epoTime.timestr(1, ' ') << " "
    314336        << satPhaseBias._updateInt << " "
    315         << biasList.size() << ' ' << satPhaseBias._staID << endl;
     337        << biasList.size() << ' ' << satPhaseBias._staID << ' '
     338        << satPhaseBias._ssrIOD << ' ' << satPhaseBias._ssrProviderID << endl;
    316339
    317340      if (satPhaseBias._ssrFormat == e_ssrFormat::ssrRtcmNew) {
    … …  
    373396    return;
    374397  }
     398  int ssrIOD, ssrProviderID;
     399  t_corrSSR::readSsrIOD(epoLine, ssrIOD, ssrProviderID);
    375400  for (int ii = 0; ii <= numSat; ii++) {
    376401    t_satPhaseBias satPhaseBias;
    … …  
    378403    satPhaseBias._updateInt = updateInt;
    379404    satPhaseBias._staID = staID;
     405    satPhaseBias._ssrIOD = ssrIOD;
     406    satPhaseBias._ssrProviderID = ssrProviderID;
    380407
    381408    string line;
    … …  
    392419    switch (ssrFormat) {
    393420    case e_ssrFormat::ssrRtcmNew:
    394       satPhaseBias._dispBiasConsistInd = metadata1;
    395       satPhaseBias._MelbWuebConsistInd = metadata2;
     421      satPhaseBias._satYawInfoInd = metadata1;
     422      satPhaseBias._extPBPhaseInd = metadata2;
    396423      break;
    397424    case e_ssrFormat::ssrRtcmOld:
    398425    case e_ssrFormat::ssrUnknown:
    399       satPhaseBias._satYawInfoInd = metadata1;
    400       satPhaseBias._extPBPhaseInd = metadata2;
     426      satPhaseBias._dispBiasConsistInd = metadata1;
     427      satPhaseBias._MelbWuebConsistInd = metadata2;
    401428      break;
    402429    }
    … …  
    575602      in >> frqAntenna._frqType >> frqAntenna._nadirCorrectionIndicator >> frqAntenna._nadirCorrection;
    576603      for (unsigned kk = 0; kk < numAngles; kk++) {
    577         double val;
    578         in >> val;
    579         frqAntenna._nadirAngleCorrection.push_back(val);
     604        string valStr; // may be "nan" (invalid value), which operator>> can't parse
     605        in >> valStr;
     606        frqAntenna._nadirAngleCorrection.push_back(strtod(valStr.c_str(), 0));
    580607      }
    581608      satAntenna._freq.push_back(frqAntenna);
    … …  
    684711
    685712  return unknown;
     713}
     714
     715// Optional SSR IOD and Provider ID trailing the staID in CODE_BIAS and
     716// PHASE_BIAS epoch lines (older files don't have them: -1 = unknown)
     717////////////////////////////////////////////////////////////////////////////
     718void t_corrSSR::readSsrIOD(const string& line, int& ssrIOD, int& ssrProviderID) {
     719  istringstream inLine(line.c_str());
     720  string hlp;
     721  for (int ii = 0; ii < 11; ii++) { // '>', type, 6 x date/time, updateInt, numEntries, staID
     722    inLine >> hlp;
     723  }
     724  if (!(inLine >> ssrIOD >> ssrProviderID)) {
     725    ssrIOD        = -1;
     726    ssrProviderID = -1;
     727  }
    686728}
    687729
Note: See TracChangeset for help on using the changeset viewer.