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

📄 rinexnavread.cpp

📁 对GPS导航星历(RINEX格式)的读取
💻 CPP
字号:
#include "RinexNavRead.h"


//第一行数据
const int NAV_COL_PRN    =   0;   const int NAV_LEN_PRN    =  2;
const int NAV_COL_YEAR   =   3;   const int NAC_LEN_YEAR   =  2;
const int NAV_COL_MONTH  =   6;   const int NAV_LEN_MONTH  =  2;
const int NAV_COL_DAY    =   9;   const int NAV_LEN_DAY    =  2;
const int NAV_COL_HOUR   =   12;  const int NAV_LEN_HOUR   =  2;
const int NAV_COL_MINUTE =   15;  const int NAV_LEN_MINUTE =  2;
const int NAV_COL_SECONDS=   17;  const int NAV_LEN_SECONDS=  5;
const int NAV_COL_A0     =   22;  const int NAV_LEN_A0     =  19;
const int NAV_COL_A1     =   41;  const int NAV_LEN_A1     =  19;
const int NAV_COL_A2     =   60;  const int NAV_LEN_A2     =  19;

//2-7行数据
const int NAV_COL_FIRST  =   3;   const int NAV_LEN_FIRST  =  19;
const int NAV_COL_SECOND =   22;  const int NAV_LEN_SECOND =  19;
const int NAV_COL_THIRD  =   41;  const int NAV_LEN_THIRD  =  19;
const int NAV_COL_FOUR   =   60;  const int NAV_LEN_FOUR   =  19;

vector<GMNREC> ReadRinexNavFile(string fp)
{
	    GMNREC navdata;
		vector<GMNREC> navRecord;

		ifstream inf;//C++方式打开星历文件
		inf.open(fp.c_str());//注意路径

		if(!inf)
		 {
		 cout<<"文件打开错误";
		 exit(0);
		 }

		string str_header;
		getline(inf,str_header);//读文件头

		while(str_header.substr(60,72).compare(0,13,"END OF HEADER")!=0)//忽略文件头
			
		{
			getline(inf,str_header);
			
		}
		string strData0,strData1,strData2,strData3,strData4,strData5,strData6,strData7;

		

		while(inf.peek() != EOF)
		{   
					getline(inf,strData0);//读第0行
					navdata.PRN    =    atoi(strData0.substr(NAV_COL_PRN,NAV_LEN_PRN).c_str());
					navdata.year   =    atoi(strData0.substr(NAV_COL_YEAR,NAC_LEN_YEAR).c_str());
					     if(navdata.year>80)
								navdata.year+=1900;
							else
								navdata.year+=2000;
					navdata.month  =    atoi(strData0.substr(NAV_COL_MONTH,NAV_LEN_MONTH).c_str());
					navdata.day    =    atoi(strData0.substr(NAV_COL_DAY,NAV_LEN_DAY).c_str());
					navdata.hour   =    atoi(strData0.substr(NAV_COL_HOUR,NAV_LEN_HOUR).c_str());
					navdata.minute =    atoi(strData0.substr(NAV_COL_MINUTE,NAV_LEN_MINUTE).c_str());
					navdata.second =    atof(strData0.substr(NAV_COL_SECONDS,NAV_LEN_SECONDS).c_str());
					navdata.a0     =    atof(strData0.substr(NAV_COL_A0,NAV_LEN_A0).c_str());
					navdata.a1     =    atof(strData0.substr(NAV_COL_A1,NAV_LEN_A1).c_str());
					navdata.a2     =    atof(strData0.substr(NAV_COL_A2,NAV_LEN_A2).c_str());

					getline(inf,strData1);//读第一行
					navdata.IODE   =    atof(strData1.substr(NAV_COL_FIRST,NAV_LEN_FIRST).c_str());
					navdata.Crs    =    atof(strData1.substr(NAV_COL_SECOND,NAV_LEN_SECOND).c_str());
					navdata.deltn  =    atof(strData1.substr(NAV_COL_THIRD,NAV_LEN_THIRD).c_str());
					navdata.M0     =    atof(strData1.substr(NAV_COL_FOUR,NAV_LEN_FOUR).c_str());

					getline(inf,strData2);//读第二行
					navdata.Cuc    =    atof(strData2.substr(NAV_COL_FIRST,NAV_LEN_FIRST).c_str());
					navdata.e      =    atof(strData2.substr(NAV_COL_SECOND,NAV_LEN_SECOND).c_str());
					navdata.Cus    =    atof(strData2.substr(NAV_COL_THIRD,NAV_LEN_THIRD).c_str());
					navdata.SqrtA  =    atof(strData2.substr(NAV_COL_FOUR,NAV_LEN_FOUR).c_str());

					getline(inf,strData3);//读第三行
					navdata.toe    =    atof(strData3.substr(NAV_COL_FIRST,NAV_LEN_FIRST).c_str());
					navdata.Cic    =    atof(strData3.substr(NAV_COL_SECOND,NAV_LEN_SECOND).c_str());
					navdata.omiga0 =    atof(strData3.substr(NAV_COL_THIRD,NAV_LEN_THIRD).c_str());
					navdata.Cis    =    atof(strData3.substr(NAV_COL_FOUR,NAV_LEN_FOUR).c_str());

					getline(inf,strData4);//读第四行
					navdata.i0       =  atof(strData4.substr(NAV_COL_FIRST,NAV_LEN_FIRST).c_str());
					navdata.Crc      =  atof(strData4.substr(NAV_COL_SECOND,NAV_LEN_SECOND).c_str());
					navdata.omiga    =  atof(strData4.substr(NAV_COL_THIRD,NAV_LEN_THIRD).c_str());
					navdata.omigaDot =  atof(strData4.substr(NAV_COL_FOUR,NAV_LEN_FOUR).c_str());

					getline(inf,strData5);//读第五行
					navdata.iDot              =  atof(strData5.substr(NAV_COL_FIRST,NAV_LEN_FIRST).c_str());
					navdata.CodesOnL2Chanel   =  atof(strData5.substr(NAV_COL_SECOND,NAV_LEN_SECOND).c_str());
					navdata.weekno            =  atof(strData5.substr(NAV_COL_THIRD,NAV_LEN_THIRD).c_str());
					navdata.L2PdataFlag       =  atof(strData5.substr(NAV_COL_FOUR,NAV_LEN_FOUR).c_str());

					getline(inf,strData6);//读第六行
					navdata.SVAccuracy  =  atof(strData6.substr(NAV_COL_FIRST,NAV_LEN_FIRST).c_str());
					navdata.SVHealth    =  atof(strData6.substr(NAV_COL_SECOND,NAV_LEN_SECOND).c_str());
					navdata.tgd         =  atof(strData6.substr(NAV_COL_THIRD,NAV_LEN_THIRD).c_str());
					navdata.todc        =  atof(strData6.substr(NAV_COL_FOUR,NAV_LEN_FOUR).c_str());

					getline(inf,strData7);//读第七行
					navdata.TransTimeofMsg  =  atof(strData7.substr(NAV_COL_FIRST,NAV_LEN_FIRST).c_str());
					navdata.spare1          =  atof(strData7.substr(NAV_COL_SECOND,NAV_LEN_SECOND).c_str());
		            navdata.spare2          =  0;
		            navdata.spare3          =  0;
//
					navRecord.push_back(navdata);

				
       
	   
		  }

         inf.close();//关闭文件


  return navRecord;

}

⌨️ 快捷键说明

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