Changeset 11037 in ntrip


Ignore:
Timestamp:
Sep 21, 2026, 3:24:09 PM (11 hours ago)
Author:
stuerze
Message:

updates regarding RTCM-SSR

Location:
trunk/BNC/src
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/BNC/src/rinex/corrfile.cpp

    r11023 r11037  
    124124      emit newMetaData(metaData);
    125125    }
     126    else if (corrType == t_corrSSR::satAntenna) {
     127      QList<t_satAntenna> satAntennaList;
     128      t_satAntenna::readEpoch(_lastLine, _stream, satAntennaList);
     129      emit newSatAntennas(satAntennaList);
     130    }
    126131
    127132    _lastLine.clear();
  • trunk/BNC/src/rinex/corrfile.h

    r11023 r11037  
    4949  void newTec(t_vTec);
    5050  void newMetaData(t_metaData);
     51  void newSatAntennas(QList<t_satAntenna>);
    5152
    5253 private:
  • trunk/BNC/src/satObs.cpp

    r11008 r11037  
    493493//
    494494////////////////////////////////////////////////////////////////////////////
     495void t_satAntenna::writeEpoch(ostream* out, const QList<t_satAntenna>& antList) {
     496  if (!out || antList.size() == 0) {
     497    return;
     498  }
     499  out->setf(ios::fixed);
     500  bncTime epoTime;
     501  QListIterator<t_satAntenna> it(antList);
     502  while (it.hasNext()) {
     503    const t_satAntenna& satAntenna = it.next();
     504    if (!epoTime.valid()) {
     505      epoTime = satAntenna._time;
     506      *out << "> SAT_ANTENNA " << epoTime.datestr(' ') << ' ' << epoTime.timestr(1, ' ') << " "
     507        << 0 << " " << antList.size() << ' ' << satAntenna._staID << endl;
     508    }
     509    // header fields are genuinely per system (e.g. GPS/GLONASS/Galileo carry
     510    // different maximumOffNadirAngle), so they are written per satellite
     511    // rather than once per epoch like t_satPhaseBias's metadata line
     512    *out << satAntenna._prn.toString() << ' '
     513      << setw(4) << satAntenna._ssrProviderID << ' '
     514      << setw(2) << satAntenna._satelliteAntennaIOD << ' '
     515      << setw(1) << satAntenna._phaseCenterInfoInd << ' '
     516      << setw(1) << satAntenna._groupDelayInfoInd << ' '
     517      << setw(1) << satAntenna._nadirAngleDependentCorrInd << ' '
     518      << setw(2) << satAntenna._maximumOffNadirAngle << ' '
     519      << setw(2) << satAntenna._nadirAngleRangeExtension << "   "
     520      << setw(2) << satAntenna._freq.size();
     521    for (unsigned ii = 0; ii < satAntenna._freq.size(); ii++) {
     522      const t_frqAntenna& frqAntenna = satAntenna._freq[ii];
     523      *out << "   " << frqAntenna._freqIndex << ' '
     524        << frqAntenna._nadirCorrectionIndicator << ' '
     525        << setw(10) << setprecision(4) << frqAntenna._nadirCorrection;
     526      for (unsigned jj = 0; jj < frqAntenna._nadirAngleCorrection.size(); jj++) {
     527        *out << ' ' << setw(9) << setprecision(4) << frqAntenna._nadirAngleCorrection[jj];
     528      }
     529    }
     530    *out << endl;
     531  }
     532  out->flush();
     533}
     534
     535//
     536////////////////////////////////////////////////////////////////////////////
     537void t_satAntenna::readEpoch(const string& epoLine, istream& inStream, QList<t_satAntenna>& antList) {
     538  bncTime epoTime;
     539  unsigned int updateInt;
     540  int numSat;
     541  string staID;
     542  if (t_corrSSR::readEpoLine(epoLine, epoTime, updateInt, numSat, staID) != t_corrSSR::satAntenna) {
     543    return;
     544  }
     545  for (int ii = 0; ii < numSat; ii++) {
     546    t_satAntenna satAntenna;
     547    satAntenna._time = epoTime;
     548    satAntenna._staID = staID;
     549
     550    string line;
     551    getline(inStream, line);
     552    istringstream in(line.c_str());
     553
     554    int numFreq;
     555    in >> satAntenna._prn
     556       >> satAntenna._ssrProviderID
     557       >> satAntenna._satelliteAntennaIOD
     558       >> satAntenna._phaseCenterInfoInd
     559       >> satAntenna._groupDelayInfoInd
     560       >> satAntenna._nadirAngleDependentCorrInd
     561       >> satAntenna._maximumOffNadirAngle
     562       >> satAntenna._nadirAngleRangeExtension
     563       >> numFreq;
     564
     565    char sys = satAntenna._prn.system();
     566    int num = satAntenna._prn.number();
     567    int flag = t_corrSSR::getSsrNavTypeFlag(sys, num);
     568    satAntenna._prn.setFlag(flag);
     569
     570    unsigned int numAngles = satAntenna._nadirAngleDependentCorrInd ?
     571                              satAntenna._maximumOffNadirAngle + 1 : 0;
     572
     573    for (int jj = 0; jj < numFreq; jj++) {
     574      t_frqAntenna frqAntenna;
     575      in >> frqAntenna._freqIndex >> frqAntenna._nadirCorrectionIndicator >> frqAntenna._nadirCorrection;
     576      for (unsigned kk = 0; kk < numAngles; kk++) {
     577        double val;
     578        in >> val;
     579        frqAntenna._nadirAngleCorrection.push_back(val);
     580      }
     581      satAntenna._freq.push_back(frqAntenna);
     582    }
     583
     584    antList.push_back(satAntenna);
     585  }
     586}
     587
     588//
     589////////////////////////////////////////////////////////////////////////////
    495590void t_metaData::write(ostream* out, const t_metaData& md) {
    496591  if (!out || md._entries.size() == 0) {
     
    582677    else if (typeString == "META_DATA") {
    583678      return metaData;
     679    }
     680    else if (typeString == "SAT_ANTENNA") {
     681      return satAntenna;
    584682    }
    585683  }
  • trunk/BNC/src/satObs.h

    r11008 r11037  
    280280};
    281281
     282class t_frqAntenna {
     283 public:
     284  t_frqAntenna() {
     285    _freqIndex                = 0;
     286    _nadirCorrectionIndicator = false;
     287    _nadirCorrection          = 0.0;
     288  }
     289  unsigned int        _freqIndex; // 0 .. ANT_MAXFREQUENCIES-1, DF+018 bit position
     290  bool                _nadirCorrectionIndicator;
     291  double              _nadirCorrection;      // m, only valid if _nadirCorrectionIndicator
     292  std::vector<double> _nadirAngleCorrection; // m, one entry per nadir angle bin
     293};
     294
     295class t_satAntenna {
     296 public:
     297  t_satAntenna() {
     298    _ssrProviderID              = 0;
     299    _satelliteAntennaIOD        = 0;
     300    _phaseCenterInfoInd         = false;
     301    _groupDelayInfoInd          = false;
     302    _nadirAngleDependentCorrInd = false;
     303    _maximumOffNadirAngle       = 0;
     304    _nadirAngleRangeExtension   = 0;
     305  }
     306  static void writeEpoch(std::ostream* out, const QList<t_satAntenna>& antList);
     307  static void readEpoch(const std::string& epoLine, std::istream& in, QList<t_satAntenna>& antList);
     308  std::string               _staID;
     309  t_prn                     _prn;
     310  bncTime                   _time;                       // time this message was decoded (no epoch field on the wire)
     311  unsigned int               _ssrProviderID;              // not satellite specific
     312  unsigned int               _satelliteAntennaIOD;        // not satellite specific; unique per provider within a 64-day window
     313  bool                       _phaseCenterInfoInd;         // not satellite specific
     314  bool                       _groupDelayInfoInd;          // not satellite specific
     315  bool                       _nadirAngleDependentCorrInd; // not satellite specific
     316  unsigned int               _maximumOffNadirAngle;       // not satellite specific
     317  unsigned int               _nadirAngleRangeExtension;   // not satellite specific
     318  std::vector<t_frqAntenna> _freq;
     319};
     320
    282321class t_corrSSR {
    283322 public:
    284   enum e_type {clkCorr, orbCorr, codeBias, phaseBias, vTec, URA, metaData, unknown};
     323  enum e_type {clkCorr, orbCorr, codeBias, phaseBias, vTec, URA, metaData, satAntenna, unknown};
    285324  static e_type readEpoLine(const std::string& line, bncTime& epoTime,
    286325                            unsigned int& updateInt, int& numEntries, std::string& staID);
Note: See TracChangeset for help on using the changeset viewer.