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

📄 getsp3.h

📁 卫星单点定位程序
💻 H
字号:
#ifndef _GETSP3_H_
#define _GETSP3_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_SP3_DATA			= 100;	//数据行的最大长度长度 +1


//SP3 格式文件文件头节
typedef struct tagSP3HDR {
	char		ver_id[3];			//版本标识符
	char		type_id[2];			//位置(P)或 位置/速度(V)标识符
	COMMONTIME	firt_epoch;			//轨道数据的首历元时刻
	int			epoch_count;		//本数据文件的总历元数
	char		data_type[6];		//数据处理所采用数据的类型
	char		ref_frame[6];		//轨道数据所属的坐标参照系
	char		orbit_type[4];		//轨道类型
	char		agency[5];			//发布轨道的机构
	long		wn;					//首历元的GPS周
	double		gps_seconds;		//首历元的GPS周内秒
	long		interval;			//历元间隔
	unsigned char sat_num;			//轨道数据所涉及卫星的数量
	unsigned char prn[85];			//所涉及卫星的 PRN 列表
	unsigned char precision[85];	//所涉及卫星的精度列表
} SP3HDR;

//每颗卫星的数据
typedef struct tagSP3RECDATA {
	unsigned char	prn;			//该卫星的 PRN 
	CRDCARTESIAN	position;		//坐标
//	CRDCARTESIAN	velocity;		//速度
	double			clk_bias;		//卫星钟钟差
//	double			clk_rate;		//卫星钟钟飘
} SP3RECDATA;

//每一历元的数据
typedef struct tagSP3REC {
	COMMONTIME tm;			//历元时刻
	SP3RECDATA *data;		//该历元所有卫星的轨道数据
} SP3REC;

//每一 SP3 格式文件包含的数据
typedef struct tagSP3 {
	SP3HDR hdr;			//文件头节
	SP3REC *rec;		//数据
} SP3;


//读取 SP3 格式文件
SP3 * GetSP3(char *FileName);	//FileName: SP3 轨道数据文件文件名
//返回值:正常则包含 SP3 数据的指针,否则返回 NULL


//将一行包含通用时的字符串转换成 一个通用时数据
int csatoCommonTime(const char *str,	//包含时间数据的字符串
					COMMONTIME *ct);	//转换出的时间数据
//返回值:正常返回 0 ,否则返回 1


//从包含记录的字符串中提取记录
int GetSP3Rec(FILE		*datafile,	//包含时间数据的字符串
			  long		fpos,		//文件位置
			  SP3HDR	hdr,		//SP3 格式文件的文件头数据
			  SP3REC	*rec);		//用于保存数据的记录结构
//返回值:如果读取成功返回读取完毕后的文件指针位置
//		  如果读取失败则返回 -1
//		  如果读取失败且已经到达文件尾则返回 -2


//判断字符串是否文件结束标识符 "EOF"
int csfeof(const char *str);
//返回值:是则返回 1,否则返回 0;

//拉格朗日插值公式:y=L(x)
double lagrange(double x[],		//
				double y[],		//
				double x0,		//插入点的已知值
				int m);			//已知点个数
//返回值:插值结果

//获取指定卫星在指定历元时刻在ECEF下的坐标和钟差。
int GetOrbNClkSP3 (SP3* sp3,					//sp3:指向SP3数据的指针;
				long nPRN,					//卫星的PRN号
				PCOMMONTIME ctEpoch,		//历元时刻;
				PCRDCARTESIAN pcrdOrb,		//指向卫星在ECEF下坐标的指针;
				double* pdSVClkBias);		//指向卫星钟差的指针。
//返回值:正常返回 0 ,否则返回其他;

#endif

⌨️ 快捷键说明

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