资源简介
在用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
相关资源
- GPS 模块测试
- vgps(免费版).zip
- 公交gps监控平台
- GPSINS组合导航系统GPSINS组合导航系统
- GPGGA协议解析简单版
- GPS信号捕获仿真
- GPS的授时原理及应用
- Windows CE环境下GPS定位信息的读取和接
- GPS公交自动报站
- 基于单片机和GPS定位的自主导航采摘
- gps 读取卫星星历文件计算卫星位置
- 基于VHDL的GPS设计
- wince 6.0 GPS 导航软件
- GPS轨迹数据集
- SINS_GPS组合导航系统Kalman滤波仿真研究
- gps定位从串口返回gps数据程序代码
- GPSR_KeLiu
- 单片机与GPRS模块通信需要做的工作
- GPS坐标转换为百度地图坐标JS
- GPS和GLONASS卫星星历地址
- 科沃兹GPS驱动适用于VK162、VK172
- GPS数据格式转换[CRX2RNX&&RNX2CRX]
- gps信号模拟软件
- MIB二代GPS日期解决方案.zip
- 基于Surfer的平原区域GPS高程拟合应用
- 基于Surfer的GPS高程异常插值研究
- GPS对流层延迟改正映射函数模型研究
- GPS车辆智能调度报表系统在鞍千矿的
- 论文研究 - 云南腾冲地面GPS遥感水汽
- GPS轨迹坐标转换WGS84转GCJ02转web墨卡托
评论
共有 条评论