Changeset 1218 in ntrip for trunk/BNC/RTCM/RTCM2Decoder.cpp
- Timestamp:
- Nov 19, 2008, 2:56:05 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/BNC/RTCM/RTCM2Decoder.cpp
r1167 r1218 42 42 #include <sstream> 43 43 #include <iomanip> 44 #include <set> 44 45 45 46 #include "../bncutils.h" … … 64 65 65 66 RTCM2Decoder::~RTCM2Decoder() { 66 for (t_ pairMap::iterator ii = _ephPair.begin(); ii != _ephPair.end(); ii++) {67 for (t_listMap::iterator ii = _ephList.begin(); ii != _ephList.end(); ii++) { 67 68 delete ii->second; 68 69 } … … 104 105 105 106 // 106 t_irc RTCM2Decoder::Decode(char* buffer, int bufLen) { 107 t_irc RTCM2Decoder::Decode(char* buffer, int bufLen, vector<string>& errmsg) { 108 109 errmsg.clear(); 107 110 108 111 _buffer.append(buffer, bufLen); … … 165 168 if (_msg2021.valid()) { 166 169 decoded = true; 167 translateCorr2Obs( );170 translateCorr2Obs(errmsg); 168 171 } 169 172 } … … 182 185 183 186 184 void RTCM2Decoder::storeEph(const gpsephemeris& gpseph) {187 bool RTCM2Decoder::storeEph(const gpsephemeris& gpseph, string& storedPRN, vector<int>& IODs) { 185 188 t_ephGPS eph; eph.set(&gpseph); 186 189 187 storeEph(eph);188 } 189 190 191 void RTCM2Decoder::storeEph(const t_ephGPS& gpseph) {190 return storeEph(eph, storedPRN, IODs); 191 } 192 193 194 bool RTCM2Decoder::storeEph(const t_ephGPS& gpseph, string& storedPRN, vector<int>& IODs) { 192 195 t_ephGPS* eph = new t_ephGPS(gpseph); 193 196 194 197 string prn = eph->prn(); 195 198 196 t_ pairMap::iterator ip = _ephPair.find(prn);197 if (ip == _eph Pair.end() ) {198 ip = _eph Pair.insert(pair<string, t_ephPair*>(prn, new t_ephPair)).first;199 } 200 t_eph Pair* pair= ip->second;201 202 if ( !pair->eph || eph->isNewerThan(pair->eph) ) {203 delete pair->oldEph; 204 pair->oldEph = pair->eph;205 pair->eph = eph;206 207 return ;199 t_listMap::iterator ip = _ephList.find(prn); 200 if (ip == _ephList.end() ) { 201 ip = _ephList.insert(pair<string, t_ephList*>(prn, new t_ephList)).first; 202 } 203 t_ephList* ephList = ip->second; 204 205 bool stored = ephList->store(eph); 206 207 if ( stored ) { 208 storedPRN = eph->prn(); 209 ephList->getIODs(IODs); 210 return true; 208 211 } 209 212 210 213 delete eph; 214 215 return false; 211 216 } 212 217 213 218 214 void RTCM2Decoder::translateCorr2Obs( ) {219 void RTCM2Decoder::translateCorr2Obs(vector<string>& errmsg) { 215 220 216 221 if ( !_msg03.validMsg || !_msg2021.valid() ) { … … 248 253 const RTCM2_2021::HiResCorr* corr = icorr->second; 249 254 255 // beg test 256 if ( corr->PRN >= 200 ) { 257 continue; 258 } 259 // end test 260 261 250 262 ostringstream oPRN; oPRN.fill('0'); 251 263 … … 255 267 string PRN(oPRN.str()); 256 268 257 t_pairMap::const_iterator ieph = _ephPair.find(PRN); 258 const t_eph* eph0 = 0; 259 const t_eph* eph1 = 0; 260 261 if ( ieph != _ephPair.end() ) { 262 eph0 = ieph->second->eph; 263 eph1 = ieph->second->oldEph; 264 } 265 266 if ( !eph0 && !eph1 ) { 269 t_listMap::const_iterator ieph = _ephList.find(PRN); 270 271 if ( ieph == _ephList.end() ) { 272 errmsg.push_back("missing eph for " + PRN); 267 273 continue; 268 274 } … … 277 283 p_obs new_obs = 0; 278 284 285 // missing IOD 286 vector<string> missingIOD; 287 vector<string> hasIOD; 279 288 for (unsigned ii = 0; ii < 4; ii++) { 280 289 int IODcorr = 0; … … 312 321 } 313 322 314 eph = 0; 315 if ( eph0 && eph0->IOD() == IODcorr ) 316 eph = eph0; 317 else if ( eph1 && eph1->IOD() == IODcorr ) 318 eph = eph1; 319 if ( eph && corr ) { 323 eph = ieph->second->getEph(IODcorr); 324 325 if ( eph ) { 326 ostringstream msg; 327 msg << obsT << ':' << setw(3) << eph->IOD(); 328 hasIOD.push_back(msg.str()); 329 330 320 331 int GPSWeek_tot; 321 332 double GPSWeeks_tot; … … 372 383 } 373 384 } 385 else if ( IODcorr != 0 ) { 386 ostringstream msg; 387 msg << obsT << ':' << setw(3) << IODcorr; 388 missingIOD.push_back(msg.str()); 389 } 374 390 } // loop over frequencies 375 391 392 // Error report 393 if ( missingIOD.size() ) { 394 ostringstream missingIODstr; 395 396 copy(missingIOD.begin(), missingIOD.end(), ostream_iterator<string>(missingIODstr, " ")); 397 398 errmsg.push_back("missing eph for " + PRN + " , IODs " + missingIODstr.str()); 399 } 400 401 // Store new observation 376 402 if ( new_obs ) { 377 403 _obsList.push_back( new_obs ); 378 } 379 } 380 } 404 405 ///ostringstream hasIODstr; 406 ///copy(hasIOD.begin(), hasIOD.end(), ostream_iterator<string>(hasIODstr, " ")); 407 ///errmsg.push_back("decoded PRN " + PRN + " : " + hasIODstr.str()); 408 } 409 } 410 }
Note:
See TracChangeset
for help on using the changeset viewer.