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

📄 readon.h

📁 gps 卫星位置的计算 坐标系转换 功能很强大
💻 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 + -