• 大小: 3KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-10
  • 语言: 其他
  • 标签: GPS  

资源简介

在用GPS信号进行导航定位以及制订观测计划时,都必须已知GPS卫星在空间的瞬间位置。卫星位置的计算是根据卫星电文所提供的轨道参数按一定的公式计算的。本节专门讲解观测瞬间GPS卫星在地固坐标系中坐标的计算方法

资源截图

代码片段和文件信息

//基本广播星历块
struct EPHEMERISBLOCK
//每小时一个卫星对应一个基本星历块
{
//PRN号 
int i1PRN;
double f8a0f8a1f8a2;//时间改正数
//六个轨道参数
double f8IODEf8Crsf8Deltanf8M0;// ORBIT - 1
double f8Cucf8ef8Cusf8SqrtA;// ORBIT - 2
double f8Toef8Cicf8OMEGAf8Cis;// ORBIT - 3
double f8i0f8Crcf8omegaf8OMEGAdot;// ORBIT - 4
double f8IDOTf8GpsWeekNumberf8L2Cf8L2P;// ORBIT - 5
double f8SatAccuracyf8SatHealthf8TGDf8IODC;// ORBIT - 6
};

struct XYZ
{
int prn;
double xyz;
};



////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////*参数定义如下,在DOC类中,EPHEMERISBLOCK *m_pGpsEphemeris;
XYZ *m_pxyz;
int m_i4EphemerisBlockNum;


CGpsTime为一个类,部分代码如下



int CGpsTime::InitgGpsTime (int nYear int nMounth int nDay int nHour int nMinute double dSecond)
{
int DayofMonth = 0;
int DayofYear = 0;
int weekno = 0;
int dayofweek;
int m;
if (nYear < 1980 || nMounth < 1 || nMounth > 12 || nDay < 1 || nDay > 31) return -1;
//计算从1980年到当前的前一年的天数
for( m = 1980 ; m < nYear ; m++ )
{
   if ( (m%4 == 0 && m%100 != 0) || (m%400 == 0) ) 
   {
    DayofYear += 366;
   }
   else
    DayofYear += 365;
}
//计算当前一年内从元月到当前前一月的天数
for( m = 1;m < nMounth; m++)
{
   if(m==1 || m==3 || m==5 || m==7 || m==8 || m==10 || m==12)
    DayofMonth += 31;
   else if (m==4 || m==6 || m==9 || m==11) 
    DayofMonth += 30;
   else if (m ==2)
   {
    if ( (nYear%4 == 0 && nYear%100 != 0) || (nYear%400 == 0) )
     DayofMonth += 29;
    else 
     DayofMonth += 28;
    
   }
}
DayofMonth = DayofMonth + nDay - 6;//加上当月天数/减去1980年元月的6日  
weekno = (DayofYear + DayofMonth) / 7;//计算GPS周
dayofweek = (DayofYear + DayofMonth) % 7;
//计算GPS 周秒时间
m_dWeekSecond = dayofweek*86400 + nHour*3600 + nMinute*60 + dSecond;
m_nWeek = weekno;

return weekno;
}


*////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////strEpheNam为广博星历文件,如:c:\15372370.06n
int CGpsPosDoc::ReadBrodcastEphemeris(CString strEpheNam)
{
int i4HeadLineNum = 0;
//打开文件
CStdioFile pfEph;
BOOL IsEn = pfEph.Open(strEpheNam CFile::modeRead);
if(!IsEn) return 0;
//读入头文件
CString strLine;

while(IsEn)
{
   IsEn = pfEph.ReadString(strLine);
   i4HeadLineNum++;
   int index = strLine.Find(“END OF HEADER“);
   if( -1 != index )
    break;
}
//计算星历块数
int AllNum = 0;
while(IsEn)
{
   IsEn = pfEph.ReadString(strLine);
   AllNum++;
}
//临时读入星历块
int i4AllBlockNum = (AllNum + 1) / 8;
EPHEMERISBLOCK *pTemEpheme = new EPHEMERISBLOCK[i4AllBlockNum];
CGpsTime *pGpsTime = new CGpsTime[i4AllBlockNum];

if(!pTemEpheme || !pGpsTime) return 0;
//将文件指针调整到数据位置
pfEph.SeekToBegin();
for(int i=0; i   IsEn = pfEph.ReadString(strLine);
    //定义读取的参数
int mPrn;//卫星号PRNo 
int yearmonthdayhourminute;//卫星钟参考时刻
double   msecond; 
double   a0a1a2;//卫星钟飘参数
double   IO

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       9411  2009-08-19 09:56  通过GPS广播星历计算卫星坐标\代码.c

     目录          0  2009-08-19 09:53  通过GPS广播星历计算卫星坐标

----------- ---------  ---------- -----  ----

                 9411                    2


评论

共有 条评论