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

📄 gpssub.h

📁 这是一个GPS应用演示软件
💻 H
字号:
#include <math.h>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <mem.h>

//typedef unsigned char Boolean ;
#define   True    1
#define   False   0

typedef struct
{
  double B;  /* Unit Rad */
  double L;
  double H;  /* Unit Metre */
}GeoCoor;

typedef struct
{
  double X;   /* Unit Metre */
  double Y;
  double Z;
}XYZCoor;

typedef struct
{
  char Name[ ] ;     /*点名*/
  XYZCoor XYZ;   /*空间直角坐标(近似) */
  GeoCoor BLH;   /*已知大地坐标*/
  int No ;             /*代码,0-BLH已知,1-BL-已知,2-H已知,3-BLH未知*/
}PointType ;

typedef struct
{
  int P1 , P2 ;         /*基线向量的起点和终点序号*/
  double Dx , Dy , Dz ; /*基线向量三维坐标差*/
  double far *P ;       /*基线向量观测值的协方差阵*/
}BlineType ;

typedef struct
{
    char Name [5] ;      /*  椭球名称  */
    double A ,           /* 椭球长半轴 */
	   Alfa,         /* Alfa为扁率 */
	   E2 ,          /* 第一偏心率的平方 */
	   UTM ;         /* 中央子午线投影长度比为0.9996,其他为1 */
    double L0 ,          /* L0为中央子午线(rad) */
	   X0 ,          /* X0、Y0分别为X、Y坐标加常数(km)*/
	   Y0,
	   H0 ;          /* H0为大地高(m) */
    double DN ;          /* DN为高程(m) */
} CoordSysType ;

typedef struct
{
  double azi;  /* unit RAD */
  double elev;
  double r;    /* unit meters */

} AngleCoor;

typedef struct
{
  double GDOP;
  double PDOP;
  double HDOP;
  double VDOP;
  double TDOP;
}DOPStruct;

typedef struct          /* standard ephemerus type for ALL programs */
{
    long   TLW;
    long   HOW;
    char   URA;
    int    prn;
    short  wn;				 /*  GPS week number */
    long   tow;                          /*  sec of GPS week */
    double tgd;                          /*  grup delay (s)*/
    long   aodc;                         /*  clock date issue */
    long   toc;                          /*  clock data reference time(sec) */
    double af2,                          /*  clock correction(sec/sec2) */
	   af1,                          /*  clock correction(sec/sec) */
	   af0;                          /*  clock correction(sec) */
    double alph0;                        /*  ionospheric parameter(second) */
	   alph1;                        /*  ionospheric parameter(sec/semi-circles) */
	   alph2;                        /*  ionospheric parameter(s/semi-circles2)  */
	   alph3;                        /*  ionospheric parameter(s/semi-circles3)  */
	   belta0;                       /*  ionospheric parameter(s)     */
	   belta1;                       /*  ionospheric parameter(s/semi-circles)  */
	   belta2;                       /*  ionospheric parameter(s/semi-circles2) */
	   belta3;                       /*  ionospheric parameter(s/semi-circles3) */
    long   aode,aode3;                   /*  orbit date issue  in subframes 2 and 3 */
    double deltan;                       /*  mean anomoly correction
					     semi-circles per sec*pi = rads */
    double m0,                           /*  mean anomoly at ref time
					     semi-circles*pi = rads */
	   e,                            /*  eccentricity */
	   roota;                        /*  sqr root a ( metres 1/2 ) */
    long   toe;                          /*  ref time (sec) */
    double cic,                          /*  harmonic correction term(rads) */
	   crc,                          /*  harmonic correction term(metres) */
	   cis,                          /*  harmonic correction term(rads) */
	   crs,                          /*  harmonic correction term(metres) */
	   cuc,                          /*  harmonic correction term(rads) */
	   cus;                          /*  harmonic correction term(rads) */
    double omega0,                       /*  longitude  of asccending node
					     semi-circles*pi = rads */
	   omega,                        /*  argument of perigee
					     semi-circles*pi */
	   i0;                           /*  inclination angle at ref time
					     semi-circles*pi */
    double omegadot,                     /*  rate of right ascension
					     semi-circles/sec*pi */
	   idot;                         /*  rate of inclination
					     semi-circles/sec*pi */
   int     accuracy,                     /* User range accuracy */
	   health,                       /* Satellite health */
	   fit;                          /* Curve fit interval */
   char   prnum;			 /* sv prn number */
   char   res;                           /* Reserved character */
   unsigned checksum;                     /* check sum */
} SVText;


void BLH_XYZ ( CoordSysType Cs, double B, double L, double H,
			       double *X, double *Y, double *Z );
void BLHtoXYZ(GeoCoor *GeoPoint,XYZCoor *ECEFPoint);
void XYZ_BLH ( CoordSysType Cs ,double X, double Y, double Z,
	       double *B, double *L, double *H );
void XYZtoBLH(XYZCoor *ECEFPoint,GeoCoor *GeoPoint);
void GetSVPos(SVText *Text,double t,XYZCoor *ECEF);
void ECEFtoObs(XYZCoor *ECEFPoint,XYZCoor XYZObs0,GeoCoor GeoObs0,
	       XYZCoor *ObsPoint);
void XYZtoAngle(XYZCoor *Input, AngleCoor *Result);
void AnlgetoXYZ(AngleCoor *Input, XYZCoor *Result);
void ComputeDOP0(AngleCoor SV[4],DOPStruct *DOP);
void ComputeDOP1(XYZCoor SV[4],DOPStruct *DOP);
void ComputeDOP2(XYZCoor Obs,XYZCoor SV[4],DOPStruct *DOP);
void ComputeDOP3(AngleCoor SV[4],DOPStruct *DOP);
void PR_Pos(int Num,XYZCoor InitUser,double p1[],XYZCoor S[],double Bs[],XYZCoor *Xu);
void DMStoRAD(int Deg, int Min, double Sec, double  *Rad );
void RADtoDMS ( double Rad , int *Deg , int *Min , double *Sec);
double GetAngleXY(double dx , double dy );
int GetCoordSys ( CoordSysType *Cs );
void GaussXYBLH ( CoordSysType Cs,double X, double Y, double H1,
			     double *B, double *L, double *H );
void GaussBLHXY ( CoordSysType Cs, double B, double L,  double H1,
				  double *X,  double *Y,  double *H);

⌨️ 快捷键说明

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