#include "stdafx.h"
#include "GetPosition.h"
#include "Matrix.h"
//#include "Refraction_Delay.h"
//
using namespace math; //
#ifndef _NO_TEMPLATE //
typedef matrix<double> Matrix; //
#else //
typedef matrix Matrix; //
#endif //
//
list<PGMNREC>::iterator GetBestGMNREC(list<PGMNREC>& navRec, // 找到最佳导航电文历元
int& nPRN,PCOMMONTIME pctEpoch) //卫星号及其观测历元
{
list<PGMNREC>::iterator pnavRec;
double max=10000000;
JULIANDAY sat_toe,sat_epoch;
CommonTimeToJulianDay(pctEpoch,&sat_epoch);
int i=0,nummax=0;
for(pnavRec=navRec.begin();pnavRec!=navRec.end();pnavRec++,i++)
{
if((*pnavRec)->PRN==nPRN)
{
CommonTimeToJulianDay(&(*pnavRec)->TOC,&sat_toe);
if(fabs(GetTimeDelta(&sat_epoch,&sat_toe))<max)
{
max=fabs(GetTimeDelta(&sat_epoch,&sat_toe));
nummax=i;
}
}
}
if(max!=10000000)
{
pnavRec=navRec.begin();
for(i=0;i<nummax;i++)
pnavRec++;
return pnavRec;
}
else
{
printf("找不到最佳历元!n");
return navRec.begin();
}
}
void GetOrbNClk(list<PGMNREC>::iterator theBestGMN,PCOMMONTIME pctEpoch, PCRDCARTESIAN pcrdOrb,double* pdSVClkBias)//卫星位置 及钟差
{
//计算卫星平均角速度
double n0=sqrt(GM)/ pow((*theBestGMN)->SqrtA,3);
//计算相对于星历参考历元的时间
JU