⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rinex.cpp

📁 gps 读renix文件格式的源代码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
    return true;  }  else  {    antennaDeltaN = 0.0;    return false;  }}bool RinexObsFile::setDefWaveLenFactorL1(unsigned short input){  if( input < 3 )  {    defWaveLenFactorL1 = input;    return true;  }  else  {    defWaveLenFactorL1 = 9999;    return false;  }}bool RinexObsFile::setDefWaveLenFactorL2(unsigned short input){  if( input < 3 )  {    defWaveLenFactorL2 = input;    return true;  }  else  {    defWaveLenFactorL2 = 9999;    return false;  }}bool RinexObsFile::setNumWaveLenPRN(unsigned short input){  if( input < MAXPRNID )  {    numWaveLenPRN = input;    return true;  }  else  {    numWaveLenPRN = 0;    return false;  }}bool RinexObsFile::setNumWaveLenRecords(unsigned short input){  if( input < MAXPRNID )  {    numWaveLenRecords = input;    return true;  }  else  {    numWaveLenRecords = 0;    return false;  }}bool RinexObsFile::setAllWaveLenRecordsElement(OneWaveLenRec input, int i){    allWaveLenRecords[i] = input;    return true;}bool RinexObsFile::setNumObsTypes(unsigned short input){  if( input <= MAXOBSTYPES )  {    numObsTypes = input;    return true;  }  else  {    numObsTypes = 9999;    return false;  }}bool RinexObsFile::setObsTypeListElement(enum OBSTYPE input, int i){    obsTypeList[i] = input;    return true;}bool RinexObsFile::setObsInterval(float input){  if( input > 0.0 && input <= 86400.0 )  {    obsInterval = input;    return true;  }  else  {    obsInterval = -9999;    return false;  }}bool RinexObsFile::setFirstObs(YMDHMS input){  DateTime  Jan1_1980, Dec31_2079, inputDate;    inputDate.SetYMDHMS(input);    Jan1_1980.SetYMDHMS(1980,1,1,0,0,0.00000001);    Dec31_2079.SetYMDHMS(2079,12,31,23,59,59.99999999);    if( inputDate >= Jan1_1980 && inputDate <= Dec31_2079 )    {       firstObs = input;       return true;    }    else    {       inputDate.SetYMDHMS( 9999, 1, 1, 0, 0, 0.0 );       firstObs = inputDate.GetYMDHMS();       return false;    }}bool RinexObsFile::setFirstObsTimeSystem(string input){       firstObsTimeSystem = input.substr(0,3);       return true;}bool RinexObsFile::setLastObs(YMDHMS input){  DateTime  Jan1_1980, Dec31_2079, inputDate;    inputDate.SetYMDHMS(input);    Jan1_1980.SetYMDHMS(1980,1,1,0,0,0.00000001);    Dec31_2079.SetYMDHMS(2079,12,31,23,59,59.99999999);    if( inputDate >= Jan1_1980 && inputDate <= Dec31_2079 )    {       lastObs = input;       return true;    }    else    {       inputDate.SetYMDHMS( 9999, 1, 1, 0, 0, 0.0 );       lastObs = inputDate.GetYMDHMS();       return false;    }}bool RinexObsFile::setLastObsTimeSystem(string input){       lastObsTimeSystem = input.substr(0,3);       return true;}bool RinexObsFile::setNumberLeapSec(unsigned short input){       numberLeapSec = input;       return true;}bool RinexObsFile::setRcvrClockApplied(unsigned short input){   if( input == 0 || input == 1 )   {       rcvrClockApplied = input;       return true;   }   else   {       rcvrClockApplied = 9999;       return true;   }}bool RinexObsFile::setNumberOfSat(unsigned short input){   if( input <= MAXPRNID )   {       numberOfSat = input;       return true;   }   else   {       numberOfSat = 9999;       return true;   }}bool RinexObsFile::setSatObsTypeListElement(ObsCountForPRN input, int i){       satObsTypeList[i] = input;       return true;}bool RinexObsFile::setNextSat(unsigned short input){       nextSat = input;       return true;}void RinexObsFile::incrementNumberObsEpochs( unsigned int n ){   numberObsEpochs = numberObsEpochs + n;      // n is usually one}void RinexObsFile::initializeData(){//    Initializes the OBS private data with NULL values.  For strings NULL//    is an empty string.  For numeric values the NULL is chosen as a value//    that can be stored in the data type (short) but which is outside of the//    allowed range for the data element.  NULLs are typically all 9999s   unsigned int   i;   unsigned int   j;   formatVersion           = 0.0;   rinexFileType           = ' ';   satSystem               = ' ';   rinexProgram            = "";   createdByAgency         = "";   dateFileCreated         = "";   markerName              = "";   markerNumber            = "";   observerName            = "";   observerAgency          = "";   receiverNumber          = "";   receiverType            = "";   receiverFirmwareVersion = "";   antennaNumber           = "";   antennaType             = "";   approxX                 = 0.0;   approxY                 = 0.0;   approxZ                 = 0.0;   antennaDeltaH           = 0.0;   antennaDeltaE           = 0.0;   antennaDeltaN           = 0.0;   defWaveLenFactorL1      = 9999;   defWaveLenFactorL2      = 9999;   numWaveLenPRN           = 0;   numWaveLenRecords       = 0;   numberLeapSec           = 9999;   rcvrClockApplied        = 9999;   for ( i = 0; i < MAXPRNID; i++ )   {      allWaveLenRecords[i].L1Factor = 9999;      allWaveLenRecords[i].L2Factor = 9999;      allWaveLenRecords[i].numSatInRecord = 0;      for( j = 0; j < 7; j++ )            allWaveLenRecords[i].satsInRecord[j] = "";   }   numObsTypes = 9999;   for ( i = 0; i < MAXOBSTYPES; i++ )   {      obsTypeList[ i ] = NOOBS;   }   obsInterval        = -9999.0;   firstObs.year      = 9999;   firstObs.month     = 1;   firstObs.day       = 1;   firstObs.hour      = 0;   firstObs.min       = 0;   firstObs.sec       = 0.0;   firstObsTimeSystem = "";   lastObs.year       = 9999;   lastObs.month      = 1;   lastObs.day        = 1;   lastObs.hour       = 0;   lastObs.min        = 0;   lastObs.sec        = 0.0;   lastObsTimeSystem = "";   numberOfSat        = 9999;   for ( i = 0; i < MAXPRNID; i++ )   {      satObsTypeList[ i ].satCode = ' ';      satObsTypeList[ i ].satNum = 9999;      for ( j = 0; j < MAXOBSTYPES; j++ )      {         satObsTypeList[ i ].PRNObsCount[ j ] = 9999;      }   }   for( i = 0; i < MAXOBSHEADERRECTYPES; i++)   {      headerRecs[i].numberPresent = 0;   }   headerRecs[ 0].recID = "RINEX VERSION / TYPE";   headerRecs[ 0].required = true;   headerRecs[ 1].recID = "PGM / RUN BY / DATE";   headerRecs[ 1].required = true;   headerRecs[ 2].recID = "COMMENT";   headerRecs[ 2].required = false;   headerRecs[ 3].recID = "MARKER NAME";   headerRecs[ 3].required = true;   headerRecs[ 4].recID = "MARKER NUMBER";   headerRecs[ 4].required = false;   headerRecs[ 5].recID = "OBSERVER / AGENCY";   headerRecs[ 5].required = true;   headerRecs[ 6].recID = "REC # / TYPE / VERS";   headerRecs[ 6].required = true;   headerRecs[ 7].recID = "ANT # / TYPE";   headerRecs[ 7].required = true;   headerRecs[ 8].recID = "APPROX POSITION XYZ";   headerRecs[ 8].required = true;   headerRecs[ 9].recID = "ANTENNA: DELTA H/E/N";   headerRecs[ 9].required = true;   headerRecs[10].recID = "WAVELENGTH FACT L1/2";   headerRecs[10].required = true;   headerRecs[11].recID = "# / TYPES OF OBSERV";   headerRecs[11].required = true;   headerRecs[12].recID = "INTERVAL";   headerRecs[12].required = false;   headerRecs[13].recID = "TIME OF FIRST OBS";   headerRecs[13].required = true;   headerRecs[14].recID = "TIME OF LAST OBS";   headerRecs[14].required = false;   headerRecs[15].recID = "RCV CLOCK OFFS APPL";   headerRecs[15].required = false;   headerRecs[16].recID = "LEAP SECONDS";   headerRecs[16].required = false;   headerRecs[17].recID = "# OF SATELLITES";   headerRecs[17].required = false;   headerRecs[18].recID = "PRN / # OF OBS";   headerRecs[18].required = false;   headerRecs[19].recID = "END OF HEADER";   headerRecs[19].required = true;   nextSat = 0;}unsigned short RinexObsFile::readHeader(){   unsigned short i;   unsigned short headerRecordFlag;   string         inputRec;   string         recordReadIn;   HeaderRecord   headerRec;   ostringstream  sstemp;   bool  endOfHeaderFound = false;   unsigned long numberRequiredErrors = 0;   enum { VersionRec };   if( validFirstLine(recordReadIn) )   {     headerRecs[ VersionRec ].numberPresent++;     headerRec.SetHeaderRecord( recordReadIn );     rinexHeaderImage.appendHeaderRecord( recordReadIn );   }   else   {     tempStream << "Error: First Line is incorrect in File: "     << getPathFilename() << endl << recordReadIn << endl;     appendToErrorMessages( tempStream.str() );     RequiredRecordMissingException excep( tempStream.str() );     throw excep;   }   // read all Header lines from line 2 until the end of header   while( !endOfHeaderFound )   {     if( !getline( inputStream, inputRec, '\n') )     {       // Error reading a header line of the OBS File       tempStream << "Error reading a header line of file:" << endl       << getPathFilename() << endl;       appendToErrorMessages( tempStream.str() );       RinexReadingException  excep( tempStream.str() );       throw excep;     }     incrementNumberLinesRead(1);     if( blankString(inputRec) )     {         if( formatVersion < 2.0 )         {             endOfHeaderFound = true;             headerRec.SetHeaderRecord( inputRec );             rinexHeaderImage.appendHeaderRecord( headerRec );             break;   // end the while loop         }         else         {           tempStream << "Warning! On line #" << getNumberLinesRead() << ":"	   << endl << inputRec << endl	   << " Blank header record found, skipping to next line. " << endl;           appendToWarningMessages( tempStream.str() );           continue;   // go to read the next record         }     }     if( validHeaderRecord(inputRec) )     {       headerRec.SetHeaderRecord( inputRec );       rinexHeaderImage.appendHeaderRecord( headerRec );       if( inputRec.find( "END OF HEADER" ) == 60 )       {         endOfHeaderFound = true;         break;       }       continue;  // go to read the next record     }     if( validEventFlagRecord(inputRec) )     {        tempStream << "Warning! On line #" << getNumberLinesRead() << ":"        << endl	<< inputRec << endl	<< "EPOCH/SAT Flag Record found in Header, skipping to next line."        << endl << "Check file for location of END OF HEADER record." << endl;        appendToWarningMessages( tempStream.str() );        continue;  // go to read the next record     }     tempStream << "Warning! On line #" << getNumberLinesRead() << ":"     << endl << inputRec << endl     << "Unknown Record Type found in Header, skipping to next line." << endl;     appendToWarningMessages( tempStream.str() );   } // end of while loop over all header records// Check for the presence of all manditory header records.   for ( i = 0; i < MAXOBSHEADERRECTYPES; i++ )   {      if ( headerRecs[ i ].numberPresent == 0  &&  headerRecs[ i ].required )      {	 sstemp << " missing Header record: "         << headerRecs[ i ].recID << endl;	 numberRequiredErrors++;      }   }   if( numberRequiredErrors > 0 )   {     tempStream << getPathFilename() << " has the following missing Header "     << "records." << endl << sstemp.str() << endl;     appendToErrorMessages( tempStream.str() );     RequiredRecordMissingException excep( tempStream.str() );     throw excep;   }   return(0);}bool RinexObsFile::validHeaderRecord(string inputRec){   unsigned short i;   long        tempL;   double      tempD;   double      distance;   string      temp;   string      warningString;   unsigned short  L1_fac, L2_fac, num_sat;   enum { VersionRec,   PgmRunByRec,     CommentRec,     MarkerNameRec,          MarkerNumRec, ObserverRec,     ReceiverRec,    AntennaRec,          ApproxPosRec, AntennaDeltaRec, WavelengthRec,  ObsNumTypesRec,          IntervalRec,  FirstObsTimeRec, LastObsTimeRec, RcvClkApplRec,	  LeapSecRec,   NumOfSatRec,     PRNRec,         EndHeaderRec };      if ( inputRec.find( "COMMENT" ) == 60 )      {         // all comment records are stored in the headerImage linked-list         headerRecs[ CommentRec ].numberPresent++;         return true;      }      else if ( inputRec.find( "PGM / RUN BY / DATE" ) == 60 )      {         headerRecs[ PgmRunByRec ].numberPresent++;         rinexProgram    = inputRec.substr(  0, 20 );         createdByAgency = inputRec.substr( 20, 20 );         dateFileCreated = inputRec.substr( 40, 20 );         return true;      }      else if ( inputRec.find( "MARKER NAME" ) == 60 )      {         headerRecs[ MarkerNameRec ].numberPresent++;         markerName = inputRec.substr( 0, 60 );         return true;      }      else if ( inputRec.find( "MARKER NUMBER" ) == 60 )      {         headerRecs[ MarkerNumRec ].numberPresent++;         markerNumber = inputRec.substr( 0, 20 );         return true;      }      else if ( inputRec.find( "OBSERVER / AGENCY" ) == 60 )      {         headerRecs[ ObserverRec ].numberPresent++;         observerName   = inputRec.substr( 0, 20 );         observerAgency = inputRec.substr( 20, 40 );         return true;      }      else if ( inputRec.find( "REC # / TYPE / VERS" ) == 60 )      {         headerRecs[ ReceiverRec ].numberPresent++;         receiverNumber          = inputRec.substr(  0, 20 );         receiverType            = inputRec.substr( 20, 20 );         rece

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -