📄 readon.h
字号:
#ifndef readon_h
#define readon_h
#include "math.h"
#include <stdio.h>
#include <string.h>
#include "sdoublearray.h"
#define MAX_BUF 256
#define SPEED_OF_LIGHT 299792458.0 // 光速
#define F_L1 1575.42E6 // L1载波频率
#define F_L2 1227.60E6 // L2载波频率
#define PI 3.1415926535897932384626// 圆周率
#define PRINT_N_HEADER
// NAV
struct GPS_N_HEADER
{
char Version[5]; // 格式版本
char FileType; // 文件类型
double IonAlpha[4]; // 电离层参数A0-A3
double IonBeta[4]; // 电离层参数B0-B3
double DeltaUtc_A[2]; // 计算时间改正数A0 A1
long DeltaUtc_TW[2]; // T:UTC数据的参考时刻
// W:UTC参考星期数
int iLeapSeconds; // 秒跳
long szMarkName; // 点名
};
struct EPHEMERIS
{
unsigned short PRN ; // PRN卫星编号
int year;
int month;
int day;
int hour;
int minute;
double second;
double Toc; // 历元:TOC-时钟时间
double a0; // 卫星时钟偏差
double a1; // 卫星时钟漂移
double a2; // 卫星时钟漂移率
double IODE; // IODE星历数据有效期
double Crs; // (m)
double Delta_n; // (rad/s)
double M0; // (rad)
double Cuc; // (rad)
double e; // 轨道偏心率
double Cus; // (rad)
double sqrt_of_A; // 轨道长半径平方根
double Toe; // 星历参考历元
double Cic; // (rad)
double OMEGA0; // 按Toe计算的升交点赤径
double CIS; // (rad)
double i0; // 按Toe计算的轨道倾角
double Crc; // (m)
double omega; // 近地点角距
double OMEGA_DOT; // 升交点赤径变化率
double I_DOT; // 轨道倾角变化率
double Codes_on_L2;
double GPS_week; // GPS星期数(TOE)
double L2_pdata_flag; // L2 P数据标志
double SV_accuracy; // 卫星精度
double SV_health; // (MSB)
double TGD; // (s)
double IODC; // 时钟数据有效期
double Transtime; // 电文发送时间(GPS星期秒——由字HOW的Z计数算起)
double Fit_Interval;
};
struct SP3_EPHEMERIS
{
int year;
int month;
int day;
int hour;
int minute;
double second;
double SP3x;
double SP3y;
double SP3z;
double clockbias;
};
struct GLO_G_HEADER
{
char Version[5]; // 格式版本
char FileType[20]; // 文件类型
int year;
int month;
int day;
double Time;
};
struct G_EPHEMERIS
{
unsigned short m ; // 帧中的串号
int year;
int month;
int day;
int hour;
int minute;
double second;
};
//OBS
/*struct OBSERVATIONS
{
int PRN;
int Sat_Status;
double L1;//Phase measurements on L1 and L2
int L1_LLI;
int L1_SgnStg;
double L2;
int L2_LLI;
int L2_SgnStg;
double CA;//Pseudorange using C/A-Code on L1
int CA_LLI;
int CA_SgnStg;
double P1;//Psudorange using P-Code on L1,L2
int P1_LLI;
int P1_SgnStg;
double P2;
int P2_LLI;
int P2_SgnStg;
double D1;//Psudorange using P-Code on L1,L2
int D1_LLI;
int D1_SgnStg;
double D2;
int D2_LLI;
int D2_SgnStg;
double T1;//Transit Integrated Doppler
int T1_LLI;
int T1_SgnStg;
double T2;
int T2_LLI;
int T2_SgnStg;
double SNR_L1;//Raw signal strengths or SNR values as given by the receiver
double SNR_L2;//for the L1,L2 phase observations
double CorrectedCodeRange;
};
struct VALIDOBSERVATIONS
{
int PRN;
double CodeRange;
double P1;
double P2;//Psudorange using P-Code on L1,L2
double Phase;
double PhaseL2;
double Dopler;
};*/
class CReadON
{
public:
CReadON();
~CReadON();
///////////////////////////////////////////////////////////////
void Read_N_Header(FILE *flNavMsg);
void Read_G_Header(FILE *flNavMsg);
// int Get_N_Dimension(FILE *fp_navi,char* m_strEveryLine,BOOL m_bool);
int Get_SP3_Dimension(FILE *fp_SP3);
void Read_SP3_Data(FILE *fp_SP3, CSingleDoubleArray& S_data,SP3_EPHEMERIS ephemeris,int &m_DIM);
void Read_N_Data(FILE *flNavMsg,double* N_data,EPHEMERIS ephemeris,int &m_DIM);
void Read_G_Data(FILE *flNavMsg,double* G_data,G_EPHEMERIS ephemeris,int &m_DIM);
// void Find_O_Ephe(EPHEMERIS& comEpheInfo,CSingleDoubleArray& comData,int m_DIM,double thisobstime,int PRN);
// void SaveAllNaviData(FILE* fp_resultFileData,CSingleDoubleArray& Data,int m_DIM,int kaiguan);
void Cal_Sate_Coord(EPHEMERIS ephemeris,double OBS_GPStime,double* svpos);
int GetGPSTime(int year, int month, int day, int hour, int minute, double second, double *gpstime);
// void strMid(char* pszSrc, char* pszDest, size_t pos, size_t count);
private:
void DtoE(char s[]);
/////////////////////////////////////////////////////////////
BOOL Get_atan(double X, double Y, double &result);
//public:
//Attribute
public:
// void Read_Svpos(FILE *coord,double *data);
BOOL Read_CycObsData(FILE* fpCyc);
int getline(FILE *fp, char *s);
double Power(double a,int b);
double Degree2Rad(double g);
double Rad2Degree(double d);
BOOL BLH2XYZ(double B,double L,double H,double& x,double& y,double& z);
BOOL IonoError(double obsL1,double obsL2,int nFlag,double &dIono);
BOOL TropError(double *recPos,double *snvPos,double dtSta, double dpSta, double drhSta, double &dTrop);
BOOL XYZ2BLH(double obsX,double obsY,double obsZ,double &obsB,double &obsL,double &obsH);
BOOL GetElev(double *SatPos, double *RcvPos, double &Azim, double &Elev);
long Get_Dim_TrueCycle(FILE* fp);
double Obs_Head[ 27 ];
int Epoch_Flag;
int nObsGPSWeek;
double dObsEpoch;
double ApproxPosition[3];
double ObsFLAG[20];
int nObTypeNum;
int L1_order;
int L2_order;
int CA_order;
int P1_order;
int P2_order;
int D1_order;
int D2_order;
int T1_order;
int T2_order;
int nObsSatNum;
int nValidObsSatNum;
double dInterval;
double deltat;
int Year;
int Month;
int Day;
int Hour;
int Minute;
double Second;
double m_da;
double m_df;
double m_dB;
double m_dL;
double m_dH;
fpos_t pos;
char szBuf[MAX_BUF];
char azBuf[MAX_BUF];
char mzBuf[MAX_BUF];
/////////////////////////////////Add of mine
int m_DIM;
////////////////////////////////////
int Dimension_of_EpheData;
double Ftype;
double N_data[4000];
double G_data[4000];
double svpos[10];
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -