📄 getrnxo.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 + -