⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 getrnxnav.h

📁 卫星单点定位程序
💻 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 + -