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

📄 getrnxo.h

📁 卫星单点定位程序
💻 H
字号:
#ifndef _GETRNXO_H_
#define _GETRNXO_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_RNXO_MARK_NUMBER	= 61;	//文件头数据长度 +1
const long	_MAX_RNXO_MARK_NAME		= 21;	//文件头标签长度 +1
const long	_MAX_RNXO_DATA			= 128;	//数据行的最大长度长度 +1
const long	_MAX_RNX_MARKER_NAME	= 61;	//天线标志的名称(点名)字符串长度 +1
const long	_MAX_RNX_MARKER_NUMBER	= 21;	//天线标志的编号(点号)字符串长度 +1
const long	_MAX_OBS_NAME			= 8;	//观测值名的最大长度 +1	
const long	_MAX_ROID				= 3;	//RINEX的观测值标示的最大长度 +1
const long	_MAX_RNX_RCVR_SN		= 21;	//接收机序列号 字符串长度 +1
const long	_MAX_RNX_RCVR_VER		= 21;	//接收机版本号 字符串长度 +1
const long	_MAX_RNX_RCVR_TYPE		= 21;	//接收机类型 字符串长度 +1
const long	_MAX_RNX_ANT_SN			= 21;	//天线序列号 字符串长度 +1
const long	_MAX_RNX_ANT_TYPE		= 21;	//天线类型 字符串长度 +1
const long	_MAX_CNT_OBS_TYPE		= 20;	//观测值种类数(包括所有可能种类)
const long	_MAX_WAVELENGTH_FACT	= 2;	//载波波长因子种类数

const double _GPS_F1		= 0;			//GPS的L1载波的频率
const double _GPS_F2		= 0;			//GPS的L2载波的频率
const double _GPS_FIF		= 0;			//GPS的的频率
const double _GPS_FGF		= 0;			//GPS的的频率
const double _GPS_FWL		= 0;			//GPS的的频率
const double _GPS_FNL		= 0;			//GPS的的频率
const double _GPS_UN		= 0;			//GPS的的频率


//观测值类型
typedef enum tagGTK_TYPEGNSSOBS {// GPS观测值类型的枚举
	_GOT_PSEUDO_RANGE	= 1,	//伪距(m)
	_GOT_CARRIER_PHASE	= 2,	//载波相位观测值(周)
	_GOT_DOPPLER		= 3,	//多普勒频率(Hz)
	_GOT_SNR			= 4,	//接收机所给出的L1,L2相位观测值的原始信号强度或 SNR值
	_GOT_MISC			= 5,	//其他
	_GOT_CMBD_CP		= 6,	//载波相位观测值的线性组合
} TYPEGNSSOBS;

typedef TYPEGNSSOBS *PTYPEGNSSOBS;

//观测值
typedef struct tagGPSOBSPROP {
	char			name[_MAX_OBS_NAME];	//观测值名
	TYPEGNSSOBS		type;					//观测值类型
	double			frequency;				//频率
	unsigned char	wl_fact;				//波长因子
	double			precision;				//精度
	char			obs_id[_MAX_ROID];		//ID – RINEX的观测值标示
	unsigned char	wl_pos;					//波长因子的序号
} GPSOBSPROP;

	//观测值类型列表
const GPSOBSPROP gop[_MAX_CNT_OBS_TYPE] = {
		{"L1_FULL",	_GOT_CARRIER_PHASE,	_GPS_F1,	1, 0.001,	"L1", 1},
		{"L1_HALF", _GOT_CARRIER_PHASE, _GPS_F1,	2, 0.002,	"L1", 1},
		{"L2_FULL", _GOT_CARRIER_PHASE, _GPS_F2,	1, 0.001,	"L2", 2},
		{"L2_HALF", _GOT_CARRIER_PHASE, _GPS_F2,	2, 0.002,	"L2", 2},
		{"C1",		_GOT_PSEUDO_RANGE,	_GPS_F1,	0, 2.000,	"C1", 0},
		{"P1",		_GOT_PSEUDO_RANGE,	_GPS_F1,	0, 0.200,	"P1", 0},
		{"P2",		_GOT_PSEUDO_RANGE,	_GPS_F2,	0, 0.200,	"P2", 0},
		{"D1",		_GOT_DOPPLER,		_GPS_F1,	0, 0,		"D1", 0},
		{"D2",		_GOT_DOPPLER,		_GPS_F2,	0, 0,		"D2", 0},
		{"S1",		_GOT_SNR,			_GPS_F1,	0, 0,		"S1", 0},
		{"S2",		_GOT_SNR,			_GPS_F2,	0, 0,		"S2", 0},
		{"I_FREE",	_GOT_CMBD_CP,		_GPS_FIF,	0, 0.002,	"IF", 0},
		{"G_FREE",	_GOT_CMBD_CP,		_GPS_FGF,	0, 0.002,	"GF", 0},
		{"W_LANE",	_GOT_CMBD_CP,		_GPS_FWL,	0, 0.002,	"WL", 0},
		{"N_LANE",	_GOT_CMBD_CP,		_GPS_FNL,	0, 0.002,	"NL", 0},
		{"CMBD_CP",	_GOT_CMBD_CP,		_GPS_UN,	0, 0.000,	"CC", 0},
	};

//文件头
typedef struct tagGMOHDR {
	long			ver_major;							//RINEX主版本号
	long			ver_minor;							//RINEX次版本号
//	char			Pgm[21];							//创建本数据文件所采用程序的名称
//	char			RunBy[21];							//创建本数据文件单位的名称
//	char			Date[21];							//创建日期
	char			marker_name[_MAX_RNX_MARKER_NAME];	//天线标志的名称(点名)
	char			marker_number[_MAX_RNX_MARKER_NUMBER];//天线标志的编号(点号)
	char			rcvr_sn[_MAX_RNX_RCVR_SN];			//接收机序列号
	char			rcvr_type[_MAX_RNX_RCVR_TYPE];		//接收机类型
	char			rcvr_ver[_MAX_RNX_RCVR_VER];		//接收机版本号
	char			ant_sn[_MAX_RNX_ANT_SN];			//天线序列号
	char			ant_type[_MAX_RNX_ANT_TYPE];		//天线类型
	CRDCARTESIAN	approx_pos;							//标志的近似坐标
	CRDTOPOCENTRIC	ant_delta;							//天线高和天线偏心
	long			wavelen_fact[_MAX_WAVELENGTH_FACT];	//波长因子列表
	long			obs_type_number;					//数据文件中观测值类型总数
	char			obs_type[_MAX_CNT_OBS_TYPE][3];		//数据文件中观测值类型列表
	double			interval;							//观测值的(历元)间隔 (s)
	COMMONTIME		start_time;							//数据文件中第一个观测记录的时刻
	COMMONTIME		end_time;							//数据文件中最后一个观测记录的时刻
	long			rcvr_clock_offs_appl;				//历元时标、码伪距和载波相位是否使用接收机偏差进行了改正
	long			leap_seconds;						//自1980年1月6日以来的跳秒数
	long			epoch_number;						//历元数目
	long			gop[_MAX_CNT_OBS_TYPE];				//观测值类型列表
} GMOHDR;

typedef GMOHDR *PGMOHDR;


//GPS观测数据文件的记录节的观测值结构
typedef struct tagGPSOBS {
	double	value;	//观测值
	long	tag1;	//失锁标记符(LLI)
	long	tag2;	//信号强度
//	unsigned char	disable;//观测值是否可用,1 = 可用,0 = 不可用
} GPSOBS ;

typedef GPSOBS *PGPSOBS;

//GPS观测数据文件的记录节
typedef struct tagGMOREC	{
	COMMONTIME	epoch;			//观测历元时刻
	double		rcvr_clk_bias;	//接收机钟的偏差(s)
	long		sat_num;		//当前历元所观测到的卫星数
	long		sat_list[100];	//该历元卫星 PRN 列表
	GPSOBS		*obs;			//观测值列表
} GMOREC;
typedef GMOREC *PGMOREC;

//GPS观测值信息结构
typedef struct tagGMO {
	GMOHDR	hdr;
	PGMOREC	record;
} GMO;
typedef GMO *PGMO;

//读取GPS观测数据文件的函数
void* GetGMO (char *FileName);	//FileName:RINEX观测数据文件文件名。
//返回值:指向存放GPS观测数据内存的指针。

long GetGMORecord (FILE *datafile,		//包含观测数据的文件指针
				  PGMOREC rec,			//记录结构指针
				  long obs_type_number,	//观测类型数
				  long fpos);			//文件位置
//返回值:如果读取成功返回读取完毕后的文件指针位置
//		  如果读取失败则返回 -1
//		  如果读取失败且已经到达文件尾则返回 -2


//将一个字符串转换成一个GPS观测数据
GPSOBS * csatoobs(const char *str,	//包含一个GPS观测数据的字符串
				  GPSOBS *obs);		//转换后的观测数据的指针
//返回值:正常则返回 转换后的观测数据的指针,出错则返回 NULL

#endif //_GETRNXO_H_

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -