C/C++ 项目:分别用精密星历和广播星历计算卫星坐标

文章目录

  • Part.I Introduction
    • Chap.I rinex.h
    • Chap.II gmain_body.h
  • Part.II 使用方法
  • 扩展阅读

Part.I Introduction

本文将介绍一个小项目的使用方法,此项目可用精密星历和广播星历计算卫星位置,并将两者结果做差,输出至文件。
在这里插入图片描述

其实 『分别用精密星历和广播星历计算卫星坐标』 是笔者在本科阶段的一次 GNSS 编程作业,当时就把自己的代码上传的 CSDN 上面了,没想到后来受到了许多朋友的关注。但是当时本科阶段写的代码,使用起来很麻烦,近期又有朋友来请教,并且现在看当时的代码,简直是一坨…,所以花了一晚上的时间对其进行了重构,现在看起来似乎没有那么糟糕了。

整个项目的文件树如下:

.
├─data
│  ├─2019_08_28
│  └─out
├─src
│  ├─app_run
│  └─LibGNSS
│      ├─gdata
│      ├─gexport
│      └─gproc
└─_doc└─imgs

其中

  • data: 2019年08月28日的广播星历和精密星历,out是一个参考输出结果(输出结果格式:sec x y z time,其中sec是天内秒,单位为s;xyz是坐标单位为m;time 是钟改正,单位为 1e-6 s)结果文件有:
    • brdcxx.txt:这是用广播星历计算出来的Gxx号卫星的坐标
    • spxx.txt:这是用精密星历计算出来的Gxx号卫星的坐标
    • detxx.txt:这是两者之间的差值
  • src: 程序源码,包括一个 LibGNSS 库和一个 app
  • _doc: Eigen 包和本文档所用到的图片。

整个项目实现的功能有:读取精密星历和广播星历、计算两个卫星计算卫星坐标并将计算结果存储到 txt 文件中,戳我下载


下面是部分文件内容

Chap.I rinex.h

/**
* @verbatimHistory-1.0 hlgou     2024-04-01 created-1.0 xxx       20xx-xx-xx do some changes@endverbatim
*
* @file             rinex.h
* @brief            BRDC(broadcast ephemeris) data structure
* @author           hlgou.
* @date             2024-04-01
*/#ifndef RINEX_H
#define RINEX_H#include <string>#include "gexport/ExportLibGNSS.h"
namespace dawn 
{struct LibGNSS_LIBRARY_EXPORT DATANODE{int PRN;//卫星的prn,double IODE;double a0, a1, a2;//钟差,钟漂double a_sqrt, e;//轨道参数double Cuc, Cus, Crc, Crs, Cic, Cis;//6个摄动参数double Dn, OMEGA, omega, i0, M0;double i_DOT, OMEGA_DOT, TGD;int GPS_WEEK, TOE, TIME;//GPS周,周内秒数,卫星发送时刻int SEC_DAY;//一天当中的多少秒};struct LibGNSS_LIBRARY_EXPORT DATALINE{int YEAR, MONTH, DAY, HOUR, MINITE, SECOND, TOC;//卫星钟的参考时刻(年月日时分秒)DATANODE nod[35];};struct LibGNSS_LIBRARY_EXPORT BRDC{   //广播星历DATALINE lin[30];double A[4], B[4], A0, A1;//电离层参数,多项式系数int T, W, LEAP_SEC, YEAR, MON, DAY;//UTC参考时刻,周,跳秒};}#endif

Chap.II gmain_body.h

/**
* @verbatimHistory-1.0 hlgou     2024-04-01 created-1.0 xxx       20xx-xx-xx do some changes@endverbatim
*
* @file             gmain_body.h
* @brief            Main process class.
* @author           hlgou.
* @date             2024-04-01
*/#ifndef GMAIN_BODY_H
#define GMAIN_BODY_H#include <cmath>#include "gdata/rinex.h"
#include "gdata/sp3.h"using namespace std;namespace dawn
{class LibGNSS_LIBRARY_EXPORT t_gmain_body{public:void setFileNmame(string wdir, string f1, string f2, string sdir);//计算精密星历和广播星历的结果及其差值并保存,i 是第 i 颗星void processBatch();protected:int _decodeSp3();int _decodeBrdc();Point _subBrdc(int time);Point _brdcCaculate(int time, int j);double _subSp3(int time, int i, int j, int t);Point _sp3Caculate(int time, int j);int _find(string p, int num, string* prn);string _wdir;           // 数据所在目录string _sdir;           // 结果保存目录string _sp3_filename;string _brdc3_filename;SP3 _gsp3;      // 精密星历结构体BRDC _gbrdc;    // 广播星历结构体DATANODE _current_DN;};
}#endif

Part.II 使用方法

所需软件:CMake + VS Studio
所需矩阵库:Eigen(放心,压缩包里有)

为了防止不必要的歧义,下面将项目的根目录称为『当前目录』

首先解压Eigen.zip,将其放在一个你不常动的目录中,将这个目录(或 这个目录/Eigen)称为『Eigen目录』

1、在src目录下新建build 文件夹

2、打开 CMake,源码路径设置为当前目录,build 路径设置为 src/build

3、点击 Configure,之后配置根据自己实际情况配,配好点击 Finish

在这里插入图片描述

4、会报错,不要急,把 『Eigen目录』赋给 Third_Eigen_ROOT,再次点击Configure

在这里插入图片描述

5、依次点击GenerateOpen Project,打开项目

6、将解决方案配置改为RelWithDebInfo(其实改不改无所谓,程序本身体量很小),将 app_run 设为启动项目,run.cpp 就是主程序

在这里插入图片描述

7、将 wdirsdir 分别改为你的路径(最好是绝对路径)

在这里插入图片描述

8、将 out 文件夹改名为 out1(备份),新建一个out 文件夹

9、快捷键F5运行程序,在out 文件夹下等待程序运行结果,完事!

扩展阅读

  • GNSS 导航电文的解读
  • 分别用精密星历和广播星历计算卫星坐标 – 对 GNSS 第一次编程的总结
  • GPS广播星历和精密星历的下载
  • CDDIS网站下 GNSS 相关的数据产品下载+命名方式解读+文件格式说明文件下载地址

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/791242.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SWM341系列应用(上位机应用)

SWM341系列之上位机应用 1、分级图像和PNG、JPG的应用 现象&#xff1a;客户使用SWM34SVET6HMI_0.4.1版本上位机进行UI界面布局&#xff0c;反馈在模拟运行时&#xff08;PC端&#xff09;流畅&#xff0c;在Demo平台&#xff08;设备端&#xff09;运行卡顿。 分析及解决&…

【fastadmin】脚本模式下,日志钩子函数执行出现死循环,导致内存溢出奔溃

问题出现原因是想对项目中error级别的日志&#xff0c;接入钉钉告警&#xff0c;方便查看 于是使用钩子方法&#xff0c;日志写入完成后&#xff0c;自动调用自定义的告警方法中 1、在application/tags.php 中添加log_write_done > [app\\common\\behavior\\Common, ],2、在…

【THM】Nmap Post Port Scans(后端口扫描)-初级渗透测试

介绍 本房间是 Nmap 系列的最后一个(网络安全简介模块的一部分)。在这个房间中,我们重点关注端口扫描之后的步骤:特别是服务检测、操作系统检测、Nmap脚本引擎和保存扫描结果。 Nmap实时主机发现Nmap基本端口扫描Nmap高级端口扫描Nmap后端口扫描在本系列的第一个房间中,我…

代码随想录第29天|491.递增子序列 46.全排列 47.全排列 II

目录&#xff1a; 491.递增子序列 46.全排列 47.全排列 II 491.递增子序列 491. 非递减子序列 - 力扣&#xff08;LeetCode&#xff09; 代码随想录 (programmercarl.com) 回溯算法精讲&#xff0c;树层去重与树枝去重 | LeetCode&#xff1a;491.递增子序列_哔哩哔哩_bili…

DTFT及其反变换的直观理解

对于离散时间傅里叶变换(DTFT)及其反变换的讲解&#xff0c;教材里通常会先给出DTFT正变换的公式&#xff0c;再举个DTFT的简单变换例子&#xff0c;推导一下DTFT的性质&#xff0c;然后给出DTFT反变换的公式&#xff0c;再证明一下正变换和反变化的对应关系。总的来说就是&…

Spring-IoC 基于xml管理

现大多使用注解方式&#xff0c;xml方式并不简洁&#xff0c;本文仅记录xml用作基础学习。 0、前提 首先在父项目的pom.xml中配置好依赖们。然后子模块也可以使用这些依赖。 在resource目录下创建Spring的xml文件&#xff0c;名称无要求&#xff0c;本文使用bean.xml。文件最…

黄锈水过滤器 卫生热水工业循环水色度水处理器厂家工作原理动画

​ 1&#xff1a;黄锈水处理器介绍 黄锈水处理器是一种专门用于处理“黄锈水”的设备&#xff0c;它采用机电一体化设计&#xff0c;安装方便&#xff0c;操作简单&#xff0c;且运行费用极低。这种处理器主要由数码射频发生器、射频换能器、活性过滤体三部分组成&#xff0c;…

uniapp uni.scss中使用@mixin混入,在文件引入@include 样式不生效 Error: Undefined mixin.(踩坑记录一)

问题&#xff1a; 在uni.scss文件定义mixin 2. 在vue文件引入: 3. 出现报错信息: 4. 问题思考&#xff1a; 是不是需要引入uni.scss &#xff1f; 答案不需要 uni.scss是一个特殊文件&#xff0c;在代码中无需 import 这个文件即可在scss代码中使用这里的样式变量。uni-app的…

原创【matcap材质在ue4中的实现办法】

matcap材质在ue4中的实现办法 2023-08-29 15:34 https://www.bilibili.com/video/BV1GR4y1b76n/?spm_id_from333.337.search-card.all.click&vd_sourced76b773892c830a157c0ccc97ba78411 评论(0)

《C Prime Plus》02

1. UNIX 系统 C语言因UNIX系统而生&#xff0c;也因此而流行&#xff0c;所以我们从UNIX系统开始&#xff08;注意&#xff1a;我们提到的UNIX还包含其他系统&#xff0c;如FreeBSD&#xff0c;它是UNIX的一个分支&#xff0c;但是由于法律原因不使用该名称&#xff09;。 UN…

【运输层】网络数据报协议 UDP

目录 1、UDP 的特点 2、UDP 的首部格式 UDP 只在 IP 协议之上增加了很少的一些功能&#xff0c;比如复用、分用以及差错检测等。 1、UDP 的特点 UDP是无连接的&#xff0c;即发送数据之前不需要建立连接&#xff0c;因此减少了开销和发送数据之前的时延。 UDP使用尽最大努力…

基于vscode Arduino插件开发Arduino项目

基于vscode Arduino插件开发arduino项目 插件配置问题记录1. 指定编译输出文件夹2. 编译下载时不输出详细信息3. 输出端口信息乱码4. 通过串口输出中文&#xff0c;vscode对应的串口助手上会显示乱码&#xff08;未解决&#xff09; 插件配置 环境&#xff1a;Arduino插件版本…

苏州金龙助力旅游客运加速蜕变

近日&#xff0c;北京铭悦旅游客运有限公司又迎来一批苏州金龙海格纯电动客车。&#xff08;以下简称北京铭悦旅游&#xff09;总经理郭保生在车辆交付时说到&#xff0c;“为迎接强劲复苏的旅游市场&#xff0c;要求旅游客运向绿色客运转型&#xff0c;以及人民对品质生活、美…

【LeetCode热题100】51. N 皇后(回溯)

一.题目要求 按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上&#xff0c;并且使皇后彼此之间不能相互攻击。 给你一个整数 n &#xff0c;返回所有不同的 n 皇后问题 的解决方…

4.3学习总结

[HNCTF 2022 WEEK2]Canyource&#xff08;无参数&#xff09; 通过这题又接触了一种无参数RCE的方法&#xff0c;前面学习的getallheaders只有在apache环境下才能使用&#xff0c;具有一定的局限性 这里是利用php函数来构造读取flag的方法 localeconv() – 函数返回一个包含本…

当Pycharm中右键运行python程序时出现Run ‘pytest in tests ***py‘,如何解决?

1、在Pycharm中右键运行python程序时出现Run pytest in tests ***py &#xff0c;这是进入了Pytest模式。 2、解决办法 进入到File->Settings->Tools->Python integrated Tools页面或者快捷键&#xff08;CtrlAltS&#xff09; 找到Testing下的Default test runner …

Ubuntu Desktop 安装有道词典

Ubuntu Desktop 安装有道词典 1. 有道词典2. Installation2.1. 解压 deb 包到 youdao 目录2.2. 解压 deb 包中的 control 信息 (包的依赖写在该文件里面)2.3. 编辑 control 文件&#xff0c;删除依赖里面的 gstreamer0.10-plugins-ugly2.4. 创建 youdaobuild 目录&#xff0c;重…

大模型量化技术-GPTQ

大模型量化技术-GPTQ 2022年,Frantar等人发表了论文 GPTQ:Accurate Post-Training Quantization for Generative Pre-trained Transformers。 这篇论文详细介绍了一种训练后量化算法,适用于所有通用的预训练 Transformer模型,同时只有微小的性能下降。 GPTQ算法需要通过…

rocketmq的运维

1. admintool创建topic的时候 -o 的用法含义 https://rocketmq.apache.org/zh/docs/4.x/producer/03message2/ 有关orderMessageEnable和returnOrderTopicConfigToBroker的设置可以参考 https://blog.csdn.net/sdaujsj1/article/details/115741572 -c configFile通过-c命令指…

typdef:深入理解C语言中typdef关键词的用法

typedef&#xff1a;C语言中的类型重命名关键词 在C语言中&#xff0c;typedef 是一个非常有用的关键词&#xff0c;它允许我们为现有的数据类型定义一个新的名称。这不仅使得代码更加清晰易读&#xff0c;还提高了代码的可维护性。在这篇博客中&#xff0c;我们将深入探讨 ty…