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

📄 getgmn.cpp

📁 读取GPS的Rinex观测文件
💻 CPP
字号:
/////////////////////////////////////////  21  84
#include "GetGMN.h"
#include "Rinex.h"
#include "Substr.h"
#include <cstdlib>
#include <list>
#include <fstream>
#include "iostream.h"
#include "Time.h"


GMNHDR GetGMNHDR(char *filename)//导航电文头文件
{
	GMNHDR gmnh;
	PGMNHDR pgmnh=& gmnh;//定义指针
/*
	ifstream infile(filename,ios::in|ios::nocreate);//读取导航电文头文件
	if(!infile)
	{
		cout<<"open file error!"<<endl;
		exit(1);
	}
*/
	FILE *fp = fopen(filename,"r");
//	while(!infile.eof())
	while(!feof(fp))
	{
		char str[100];
	//	infile.getline(str,81,'\n');
		fgets(str,100,fp);

		if(!strcmp("RINEX VERSION / TYPE",substr(str,60,79)))
		{
			pgmnh->ver_major=atoi(substr(str,5,5));
			pgmnh->ver_minor=atoi(substr(str,7,8));
//			cout<<"RINEX VERSION / TYPE "<<"  "<<pgmnh->ver_major<<"."<<pgmnh->ver_minor<<endl<<endl;
		}

		if(!strcmp("PGM / RUN BY / DATE",substr(str,60,78))) 
		{
			strcpy(pgmnh->program_name,substr(str,0,19));
			strcpy(pgmnh->agency_name,substr(str,20,39));
            strcpy(pgmnh->create_file_time,substr(str,40,59));
//			cout<<"PGM / RUN BY / DATE"<<"  "<<pgmnh->program_name<<" "<<pgmnh->agency_name<<" "<<pgmnh->create_file_time<<endl<<endl;

		}

		if(!strcmp("ION ALPHA",substr(str,60,68)))
		{
			pgmnh->ion_alpha[0]=atof(substr(str,2,13));
			pgmnh->ion_alpha[1]=atof(substr(str,14,25));
			pgmnh->ion_alpha[2]=atof(substr(str,26,37));
			pgmnh->ion_alpha[3]=atof(substr(str,38,49)); 
//			cout<<"ION ALPHA"<<"  "<<pgmnh->ion_alpha[0]<<"  "<<pgmnh->ion_alpha[1]<<"  "<<pgmnh->ion_alpha[2]<<"  "<<pgmnh->ion_alpha[3]<<endl<<endl;
		}

		if(!strcmp("ION BETA",substr(str,60,67)))
		{
			pgmnh->ion_beta[0]=atof(substr(str,2,13));
			pgmnh->ion_beta[1]=atof(substr(str,14,25));
			pgmnh->ion_beta[2]=atof(substr(str,26,37));
			pgmnh->ion_beta[3]=atof(substr(str,38,49));
//			cout<<"ION BETA"<<"  "<<pgmnh->ion_beta[0]<<"  "<<pgmnh->ion_beta[1]<<"  "<<pgmnh->ion_beta[2]<<"  "<<pgmnh->ion_beta[3]<<endl<<endl;
		}

		if(!strcmp("DELTA-UTC: A0,A1,T,W",substr(str,60,79)))
		{
			pgmnh->delta_utc.A0=atof(substr(str,3,21));
			pgmnh->delta_utc.A1=atof(substr(str,22,40));
			pgmnh->delta_utc.T =atof(substr(str,41,49));
			pgmnh->delta_utc.W =atof(substr(str,50,58));
//			cout<<"DELTA-UTC: A0,A1,T,W"<<"  "<<pgmnh->delta_utc.A0<<"  "<<pgmnh->delta_utc.A1<<"  "<<pgmnh->delta_utc.T<<"  "<<pgmnh->delta_utc.W<<endl<<endl;
		}

		if(!strcmp("LEAP SECONDS",substr(str,60,71)))
		{
			pgmnh->leap_seconds=atof(substr(str,0,5));
//			cout<<"LEAP SECONDS"<<"  "<<pgmnh->leap_seconds<<endl;
		}

		if(!strcmp("END OF HEADER",substr(str,60,72)))
		{
			break;
		}
		
	}//while 循环结束
//	infile.close();
	fclose(fp);
	return gmnh;

}



void GetGMNREC(char* filename, list <PGMNREC>& RecList)//导航电文记录数据
{
/*	ifstream infile(filename,ios::in|ios::nocreate);  // 定义输入文件流对象,以输入方式打开磁盘文件 filename
	if(!infile)
	{
		cerr<<"open file error!"<<endl;
		exit(1);
	}
*/
	FILE *fp = fopen(filename,"r");
//	while(!infile.eof())
	while(!feof(fp))
	{
		char str[100];
//		infile.getline(str,80,'\n');
		fgets(str,100,fp);

		if(!strcmp("END OF HEADER",substr(str,60,72)))
		{
//			while(!infile.eof())
            while(!feof(fp))
			{
				PGMNREC pgmnr=new GMNREC;//定义指针

//				infile.getline(str,80,'\n');
				fgets(str,100,fp);
				pgmnr->PRN=atoi(substr(str,0,1));
				pgmnr->TOC.year=atoi(substr(str,3,4));
				pgmnr->TOC.month=atoi(substr(str,6,7));
				pgmnr->TOC.day=atoi(substr(str,9,10));
				pgmnr->TOC.hour=atoi(substr(str,12,13));
				pgmnr->TOC.minute=atoi(substr(str,15,16));
				pgmnr->TOC.second=atof(substr(str,17,21));
				pgmnr->ClkBias=atof(substr(str,22,40));
				pgmnr->ClkDrift=atof(substr(str,41,59));
				pgmnr->ClkDriftRate=atof(substr(str,60,78));

//				infile.getline(str,85,'\n');
				fgets(str,100,fp);
				pgmnr->IODE=atof(substr(str,3,21));
				pgmnr->Crs=atof(substr(str,22,40));
				pgmnr->DetlaN=atof(substr(str,41,59));
				pgmnr->M0=atof(substr(str,60,78));

//				infile.getline(str,85,'\n');
				fgets(str,100,fp);
				pgmnr->Cuc=atof(substr(str,3,21));
				pgmnr->e=atof(substr(str,22,40));
				pgmnr->Cus=atof(substr(str,41,59));
				pgmnr->SqrtA=atof(substr(str,60,78));
             
//				infile.getline(str,85,'\n');
				fgets(str,100,fp);
				pgmnr->toe=atof(substr(str,3,21));
				pgmnr->Cic=atof(substr(str,22,40));
				pgmnr->Omega=atof(substr(str,41,59));
				pgmnr->Cis=atof(substr(str,60,78));

//				infile.getline(str,85,'\n');
				fgets(str,100,fp);
				pgmnr->i0=atof(substr(str,3,21));
				pgmnr->Crc=atof(substr(str,22,40));
				pgmnr->omega=atof(substr(str,41,59));
				pgmnr->OmegaDot=atof(substr(str,60,78));

//				infile.getline(str,85,'\n');
				fgets(str,100,fp);
				pgmnr->iDot=atof(substr(str,3,21));
				pgmnr->CodesOnL2Channel=atof(substr(str,22,40));
				pgmnr->GPSWeek=atof(substr(str,41,59));
				pgmnr->L2PDataFlag=atof(substr(str,60,78));

//				infile.getline(str,85,'\n');
				fgets(str,100,fp);
				pgmnr->SVAccuracy=atof(substr(str,3,21));
				pgmnr->SVHealth=atof(substr(str,22,40));
				pgmnr->TGD=atof(substr(str,41,59));
				pgmnr->IODC=atof(substr(str,60,78));

//				infile.getline(str,85,'\n');
				fgets(str,100,fp);
				pgmnr->TransTimeOfMsg=atof(substr(str,3,21));
				pgmnr->Spare1=atof(substr(str,22,40));
				pgmnr->Spare2=atof(substr(str,41,59));
				pgmnr->Spare3=atof(substr(str,60,78));

				pgmnr->TOE.wn=pgmnr->GPSWeek;
				pgmnr->TOE.tow.sn=long(int(pgmnr->toe));
				pgmnr->TOE.tow.tos=pgmnr->toe-pgmnr->TOE.tow.sn;
				
				RecList.push_back(pgmnr);
			}
		}
	}
	fclose(fp);

}

⌨️ 快捷键说明

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