📄 getrnxnav.h
字号:
#ifndef _GETRNX_H_
#define _GETRNX_H_
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
#include "TimeTran.h"
#include "CrdTran.h"
#include "common.h"
const long _MAX_RNXN_MARK_NUMBER=61; //文件头数据长度 +1
const long _MAX_RNXN_MARK_NAME =21; //文件头标签长度 +1
const long _MAX_RNXN_DATA =81; //数据行的最大长度长度 +1
//计算UTC时间的历书参数
typedef struct tagDELTA_UTC {
double A0; //多项式系数1
double A1; //多项式系数2
long T; //UTC数据的参考时刻
long W; //UTC参考周数,为连续计数,不是1024的余数
} DELTA_UTC;
typedef DELTA_UTC* PDELTA_UTC;
//Rinex导航文件的头结构类型
typedef struct tagGMNHDR {
unsigned char ver_major; //主版本号
unsigned char ver_minor; //次版本号
// char Pgm[21]; //创建本数据文件所采用程序的名称
// char RunBy[21]; //创建本数据文件单位的名称
// char Date[21]; //创建日期
double ion_alpha[4]; //历书中的电离层参数A0-A3
double ion_beta[4]; //历书中的电离层参数B0-B3
DELTA_UTC delta_utc; //计算UTC时间的历书参数
long leap_seconds; //由于跳秒而造成的时间差
long rec_num; //
} GMNHDR;
typedef GMNHDR* PGMNHDR;
//Rinex导航文件的记录结构类型
typedef struct tagGMNREC {
unsigned char PRN; //卫星PRN号
COMMONTIME TOC; //历元:TOC
double ClkBias; //卫星钟的偏差
double ClkDrift; //卫星钟的飘移
double ClkDriftRate; //卫星钟的飘移速度
double IODE; //数据、星历发布时间
double Crs; //卫星至地心的距离 r 的正弦调和改正项的振幅
double DeltaN; //平均运动角速度的改正量
double M0; //参考时刻的平近点角
double Cuc; //升交角距余弦调和改正的振幅
double e; //轨道偏心率
double Cus; //升交角距正弦调和改正的振幅
double SqrtA; //轨道长半轴的平方根
double TOE; //星历的参考时刻
double Cic; //轨道倾角余弦弦调和改正的振幅
double Omega; //参考时刻的升交点赤经
double Cis; //轨道倾角正弦调和改正的振幅
double i0; //轨道倾角
double Crc; //卫星至地心的距离 r 的余弦调和改正项的振幅
double omega; //近地点角距
double OmegaDot; //轨道升交点赤经变化率
double iDot; //轨道倾角的变化率
double CodesOnL2Channel; //L2上的码
double GPSWeek; //GPS周
double L2PDataFlag; //L2上的P码数据标记
double SVAccuracy; //卫星精度
double SVHealth; //卫星健康状态
double TGD; //
double IODC; //IODC钟的数据龄期
double TransTimeOfMsg; //电文发送时刻
double Sparel1; //备用1
double Sparel2; //备用2
double Sparel3; //备用3
} GMNREC;
typedef GMNREC* PGMNREC;
//Rinex导航电文结构类型
typedef struct tagGMN {
GMNHDR hdr; //文件头
GMNREC *record; //记录
} GMN;
typedef GMN *PGMN;
//读取一个纪录
long GetGMNRecord (FILE *datafile, //包含导航电文的文件指针
PGMNREC rec, //纪录结构指针
long fpos); //文件位置
//返回值:如果读取成功返回读取完毕后的文件指针位置
// 如果读取失败则返回 -1
// 如果读取失败且已经到达文件尾则返回 -2
//读取GPS导航信息文件
void* GetGMN (char *FileName); //FileName:RINEX导航电文文件文件名
//返回值:指向存放GPS导航信息内存的指针
// 如果失败则返回 NULL
//计算与给定的历元时刻最接近的有轨道参数的历元时刻,只计算小时,分秒为随机数。
int GetNearTime (PCOMMONTIME NearEpoch, //最接近的有轨道参数的历元时刻;
PCOMMONTIME Epoch, //历元时刻;
int normal); //2×i点00分00秒为 1 。2×i-1点59分44(或28)秒为 0
//返回值:正常返回 0 ,否则返回其他;
//根据给定的历元和 PRN 确定记录的序号
long GetRecSN (PGMN pGMN, //pGMN:指向GMN的指针;
long nPRN, //卫星的PRN号
PCOMMONTIME ctEpoch); //历元时刻;
//返回值:正常返回序号,出错或未找到则返回 -1;
//获取指定卫星在指定历元时刻在ECEF下的坐标和钟差。
int GetOrbNClk (PGMN pGMN, //pGMN:指向GMN的指针;
long nPRN, //卫星的PRN号
PCOMMONTIME ctEpoch, //历元时刻;
PCRDCARTESIAN pcrdOrb, //指向卫星在ECEF下坐标的指针;
double* pdSVClkBias); //指向卫星钟差的指针。
//返回值:正常返回 0 ,否则返回其他;
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -