📄 navigationfile.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 + -