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

📄 navigationfile.cpp

📁 一个gps单点定位的程序
💻 CPP
字号:
// NavigationFile.cpp: implementation of the CNavigationFile class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "GPS.h"
#include "NavigationFile.h"
#include "math.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CNavigationFile::CNavigationFile()
{
	GM=3.986005e14;
	X=0;
	Y=0;
	Z=0;
	t=0;

}

CNavigationFile::~CNavigationFile()
{

}
void CNavigationFile::SetPRN(int prn)
{
	PRN=prn;
	
}
void CNavigationFile::SetTime( int year1,int month1,int day1,int hour1,int minute1,int second1)
{
	year=year1;
	month=month1;
	day=day1;
	hour=hour1;
	minute=minute1;
	second=second1;
	GetGPSSeconds(year,month,day,hour,minute,second);
	
}
void CNavigationFile::SetAAA(double aa0,double aa1,double aa2)
{
	a0=aa0;
	a1=aa1;
	a2=aa2;
	
}
void CNavigationFile::SetFirstLine(double aode1,double Crs1,double detN,double M01)
{
	aode=aode1;
	Crs=Crs1;
	deltn=detN;
	M0= M01;
	
}
void CNavigationFile::SetSecondLine(double Cuc1,double e1,double Cus1,double a1)
{
	Cuc=Cuc1;
	e=e1;
	Cus=Cus1;
	a= a1*a1;
	
}
void CNavigationFile::SetThirdLine(double toe1,double Cic1,double OMG01,double Cis1)
{
	toe=toe1;
	Cic=Cic1;
	omiga0=OMG01;
	Cis=Cis1;
	
}
void CNavigationFile::SetForthLine(double i01,double Crc1,double w1,double kk1)
{
	i0=i01;
	Crc=Crc1;
	w=w1;
	omiga=kk1;
	
}
void CNavigationFile::SetFiveLine(double iDot1,double cflgl21,double weekno1,double pflgl21)
{
	i=iDot1;
	cflgl2=cflgl21;
	weekno=weekno1;
	pflgl2= pflgl21;
	
}
void CNavigationFile::SetSixLine(double svacc1,double svhlth1,double tgd1, double aodc1)
{
	svacc=svacc1;
	svhlth=svhlth1;
	tgd=tgd1;
	aodc=aodc1;
	
}
void CNavigationFile::SetSevenLine(double ttm1)
{
	ttm=ttm1;
	
}
double CNavigationFile::GetDetT()
{
	return deltT;

}
CString CNavigationFile::GetUCTTime()
{
	CString result;
	CString str1,str2,str3;
	str1.Format("%d",hour);
	if(hour<10)
	{
		str1="0"+str1;
	}
	str2.Format("%d",minute);
	if(minute<10)
	{
		str2="0"+str2;
	}
	str3.Format("%d",second);
	if(second<10)
	{
		str3="0"+str3;
	}
	result.Format("%d,%d,%d,%s,%s,%s",year,month,day,str1,str2,str3);
	return result;
	
}
void CNavigationFile::GetGPSSeconds(int year,int month,int day,int hour,int minute,int second)
{
	CTime gpsTime(year,month,day,hour,minute,second);
	int week=gpsTime.GetDayOfWeek();
	t=(week-1)*3600*24+hour*3600+minute*60+second;
	
}
double CNavigationFile::GetX()
{
	return X;

}
double CNavigationFile::GetY()
{
	return Y;

}
double CNavigationFile::GetZ()
{
	return Z;

}
CNavigationFile* CNavigationFile::operator=(CNavigationFile &src)
{
	if(this!=&src)
	{
		PRN=src.PRN ;
		
		year=src.year ;
		month=src.month;
		day=src.day ;
		
		hour=src.hour ;
		minute=src.minute ;
		second=src.second ;
		
		a0=src.a0 ;
		a1=src.a1 ;
		a2=src.a2 ;
		
		a=src.a;
		e=src.e;
		i0=src.i0 ;
		i=src.i ;
		M0=src.M0 ;
		deltn=src.deltn ;
		omiga=src.omiga ;
		omiga0=src.omiga0 ;
		toe=src.toe ;
		
		
		
		aode=src.aode ;
		w=src.w;
		
		Cis=src.Cis ;
		Cic=src.Cic ;
		
		Crs=src.Crs;
		Crc=src.Crc ;
		
		Cus=src.Cus;
		Cuc=src.Cus ;
		
		X=src.X;
		Y=src.Y;
		Z=src.Z;
		
		ttm=src.ttm ;
		weekno=src.weekno ;
		svhlth=src.svhlth ;
		svacc=src.svacc ;
		pflgl2=src.pflgl2 ;
		cflgl2=src.cflgl2 ;
		aode=src.aode ;
		aodc=src.aodc ;
		
		GM=src.GM ;
		t=src.t ;
		tgd=src.tgd ;
		
		deltT=src.deltT;
	}
	return this;

}
void CNavigationFile::CaculateCOR()
{
	//计算卫星的平均角速度
	double n0=sqrt(GM/pow(a,3));
	double n=n0+deltn;
	
	//对观测时刻t作钟差改正
    deltT=a0+a1*(t-toe)+a2*(t-toe)*(t-toe);
	t=t-deltT;
	
	//计算观测历元t的平近点角M
	double M=M0+n*(t-toe);
	
	//计算偏近角点E
	double E;
	E=M;
	E=M+e*sin(E);
	E=M+e*sin(E);
	E=M+e*sin(E);
	
	//真近点角f
	double f=2*atan(sqrt((1+e)/(1-e))*tan(E/2));
	
	//计算升交点角距 u0
	double u0=w+f;
	
	//计算摄动项改正
	double detU=Cus*sin(2*u0)+Cuc*cos(2*u0);
	double detR=Crs*sin(2*u0)+Crc*cos(2*u0);
	double detI=Cis*sin(2*u0)+Cic*cos(2*u0);
	
	//计算经过改正的升交角距u 卫星到地心距离r 轨道倾角 i
	double u=u0+detU;
	double r=a*(1-e*cos(E))+detR;
	i=i0+detI+i*(t-toe);
	
	//计算卫星在轨道平面坐标系中的坐标
	
	double x1=r*cos(u);
	double y1=r*sin(u);
	double z1=0;
	
	//计算观测时刻t的升交点经度LMT
	double we=7.29211567e-5;
    double LMT=omiga0+(omiga-we)*(t-toe)-we*toe;
	
	//计算卫星在地心空间直角坐标系中的坐标
	X=cos(LMT)*x1-sin(LMT)*cos(i)*y1+sin(LMT)*cos(i)*z1;
	Y=sin(LMT)*x1+cos(LMT)*cos(i)*y1-cos(LMT)*sin(i)*z1;
	Z=sin(i)*y1+cos(i)*z1;

}
int CNavigationFile::GetPRN()
{
	return PRN;
	
}

⌨️ 快捷键说明

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