分别用精密星历和广播星历计算卫星坐标 -- 对 GNSS 第一次编程的总结

article/2025/10/12 7:34:04

2019/9/24
最近上GNSS 课,老师布置了编写读取广播星历和精密星历来计算卫星坐标的作业,这篇文章对其进行一个简单的总结。
星历下载:https://blog.csdn.net/Gou_Hailong/article/details/100809806

一、用到的知识点

1、旋转矩阵
在这里插入图片描述
百度百科
2、拉格朗日插值
在这里插入图片描述
百度百科
3、RINEX 也就是广播星历的数据格式
参考博客

4、SP3
在这里插入图片描述
(图片来源于百度文库)
参考博客

二、要注意的问题

1、用 actan2 函数

2、XXDXX字符串转double 用函数

double st2d(char *str)
{   //将"aDb"格式数字转换为doubledouble f;char *pEnd;f = strtod(str, &pEnd);f *= pow(10, strtod(pEnd + 1, NULL));return f;
}

3、截取子串的函数

char st[85] = "";//求子串用到
char *substr(char *buf, int pos, int len)
{   //求子串memset(st, '\0', sizeof(st));return strncpy(st, buf + pos, len);
}

4、调试过程中如果出现 stack overflow 问题,
解决方案:属性->链接器->系统->堆栈保留大小 改的大一些

5、调用 strcpy、strcat 等函数时会提示 _CRT_SECURE_NO_WARNINGS 警告,原因是这些函数不安全,可能会造成内存泄露等。
解决方案1:
在头部加宏定义:

#define  _CRT_SECURE_NO_WARNINGS

解决方案2:
在项目 -> 属性 -> C/C++ -> 预处理器 -> 预处理器定中添加 _CRT_SECURE_NO_WARNINGS 这个预定义。
2020/5/12
应某些朋友的请求,终于抽出时间来介绍自己当时所做的工作,详见如下:

三、算法原理

由于时间太久,再看代码的话,不免有些生疏(我是谁,我在哪,这是我写的吗?)还好教材比较详细,就不费功夫自己整理辽。

总结:用广播星历计算卫星位置比较复杂,用精密星历计算卫星位置就用到了拉格朗日内插而已。

声明:上图出自教材《GPS测量与数据处理》(李征航 黄劲松 编著 第三版)武汉大学出版社 P75始 此图出于方便自己和他人学习查阅之目的,如有侵权,请联系作者删除!

四、源码简介

当时在完成编程作业的时候用的是C语言,后来学了fortran 感觉星历文件就是设计的用fortran 读的。所以,最近又写了fortran 的版本(没写完)
1.C语言版本
程序结构框架:
在这里插入图片描述
此程序自带了算例文件(路径data/8.28)是2019/8/28日的广播星历和精密星历文件。程序输出(路径data/out

brdcxx.txt    //这是用广播星历计算出来的xx号卫星的坐标
spxx.txt      //这是用精密星历计算出来的xx号卫星的坐标
detxx.txt     //这是两者之间的差值   广-精
//这三个文件存储的数据格式都是 sec x y z time
//其中 sec 是一天中第几秒   单位 s
//  xyz 是卫星坐标         单位 m 
// time 是钟改正           单位 1e-6 s

输出文件可用matlab 等软件进行绘图。
广播星历结构体:
在这里插入图片描述
精密星历结构体:
在这里插入图片描述
感兴趣的朋友可以下载:
https://download.csdn.net/download/Gou_Hailong/12413077
劳动所得,赚点积分嘛。(无积分者接受有偿提供源码,嘿嘿嘿)如果使用中遇到问题欢迎私信我或联系我的qq,但是我水平有限,可能解决不了您的问题,但是我会尽力的!
值得注意的一点是:此程序要配置Egien 库:
在这里插入图片描述

1.Fortran版本(只实现了读文件)
https://blog.csdn.net/Gou_Hailong/article/details/106085616

参考/引用文章

[1] 百度百科:https://baike.baidu.com/item/%E6%8B%89%E6%A0%BC%E6%9C%97%E6%97%A5%E6%8F%92%E5%80%BC%E5%85%AC%E5%BC%8F/4285592?fr=aladdin
[2] 百度百科:https://baike.baidu.com/item/%E6%97%8B%E8%BD%AC%E7%9F%A9%E9%98%B5/3265181?fr=aladdin
[3] Miaow678-CSDN博主:https://blog.csdn.net/Miaow678/article/details/83860975
[4] 灵影葬-CSDN博主:https://blog.csdn.net/liuci3234/article/details/21971241
[5] 流浪猪头拯救地球-CSDN博主:https://blog.csdn.net/Gou_Hailong/article/details/106085616

http://chatgpt.dhexx.cn/article/4ELavHB9.shtml

相关文章

GPS/BDS/Galileo/Glonass卫星导航系统RINEX/TLE星历下载教程

1)TLE星历下载 1)TLE星历下载 网址:http://celestrak.com/ 打开网址后,向下拉网页,找到“Current Data (TLE)”,如下图所示。 2. 单击“Current Data (TLE)”,进入卫星星历下载界面&#…

Linux下载GEO数据,最简单的IGS精密星历等数据下载方法PPT

国际GNSS服务(International GNSS Service,简称IGS)前身为国际GPS服务(International GPS Service),是由国际大地测量协会(IAG)组建的国际协作组织,其主要作用是及时提供GNSS数据和高精度的卫星星历和钟差,为大地测量学和地球动力学研究提供服…

广播星历及精密星历格式学习

文章目录 1.广播星历格式说明1.1 头文件1.2 数据部分 2.精密星历3.参考文献 1.广播星历格式说明 1.1 头文件 左边为信息,右侧为对应的标签(第60个字符) 第一行:记录了RINEX的版本号和观测类型 第二行:创建本数据文件…

Unity3D 广播星历与精密星历

通过广播星历文件计算过卫星的轨迹并与精密星历作比较,计算残差并绘图,具体效果参看下图。 // 全局变量 public static class SystemConstant {public static double omegae 7.2921151467e-5; //地球自转角速度public static double mu 3.986005e14…

精密星历介绍与使用

文章目录 精密星历精密星历下载精密星历格式简单解读 rtklib 精密星历应用插值处理Neville插值介绍 使用精密星历解算与广播星历的对比精密星历解算结果广播星历解算结果 精密星历 SP3精密星历格式,即The Extended Standard Product 3 Orbit Format. 精密星历下载…

北斗广播星历和精密星历的下载

下载广播星历的网址:https://cddis.nasa.gov/Data_and_Derived_Products/CDDIS_Archive_Access.html 该网址需要注册账号,登录该网址时最好关闭一些杀毒软件 2. 该网址中的brdc代表测站号 在下面这个地址中可以找到5种类型的广播星历 Earthdata Logi…

多系统精密星历下载与分析

概述 精密星历是由若干卫星跟踪站的观测数据,经事后处理算得的供卫星精密定位等使用的卫星轨道信息。 IGS精密星历采用sp3格式,其存储方式为ASCII文本文件,内容包括表头信息以及文件体,文件体中每隔15 min给出1个卫星的位置&…

2022年GPS广播星历精密星历如何下载

注意:!!网上现有很多教程的星历下载地址 ftp://cddis.gsfc.nasa.gov/已经访问不了了,最新的方法见下文,亲测有效~ 1、星历下载网址(需要注册一下)Earthdata Loginhttps://cddis.nasa.gov/archiv…

GPS广播星历和精密星历的下载

1.广播星历 1.1 广播星历下载路径 原路径:ftp://cddis.gsfc.nasa.gov/ 已经无法使用 新的下载路径如下:https://cddis.nasa.gov/archive/gnss/data/daily/2022/brdc/ 路径中的年份是2022年,可以根据需要进行设置不同年份。往下翻&#xff0…

Shader(GLSL)

GLSL语言编写,主要两类Vertex shader,Fragement shader Shader构造: 预处理 变量定义 通过输入参数和函数算法,计算输出结果(main函数) 预处理: 预处理的运算在编译时执行 只有一个#行的一行…

【Android -- 开源库】图片加载 Glide 的基本使用

一、简介 Glide 是一个快速高效的 Android 图片加载库,注重于平滑的滚动。 二、开始 1. 在 app/build.gradle 文件当中添加如下依赖: dependencies {compile com.github.bumptech.glide:glide:4.8.0; }2. 在 AndroidManifest.xml 添加网络权限&#…

Glide知识简介

首先Glide是Google为我们推荐的一个快速高效的图片加载库,使用简单。 第一步:添加依赖: //glide的依赖 implementation com.github.bumptech.glide:glide:4.9.0 annotationProcessor com.github.bumptech.glide:compiler:4.9.0 简单使用&…

OpenGL API - glDeleteShader

文章目录 名称原型参数描述错误 https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glDeleteShader.xhtml OpenGL API - 笔记汇总 名称 glDeleteShader ---- 删除一个 shader 对象 原型 void glDeleteShader(GLuint shader);参数 shader 指定需要删除的 shader…

Android中的Glide

引入glide <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"androi…

android Glide介绍

目录 1.Glide的基本使用 1. 介绍 2. Glide占位符 2.Glide的进阶使用 1. 过渡动画 2. 变化 transform&#xff08;&#xff09; 3. Generated API 4. GlideExtension与GlideOption 1.Glide的基本使用 1. 介绍 Glide是一个快速高效的Android图片加载库&#xff0c;可以自…

Glide(二)Glide的with,load,into

Glide的with&#xff0c;load&#xff0c;into 在Glide的常规使用中&#xff0c;我们是这样使用的&#xff1a; protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ImageView imageView fin…

Glide学习

Glide框架学习 介绍with&#xff08;生命周期&#xff09;into缓存LRU缓存三级缓存为什么要有两种内存缓存加载顺序活动缓存为什么使用弱引用 介绍 常规方式&#xff1a;Glide.with(this).load(URL).into(imageView) 虽然with方法重载了很多个&#xff0c;我们可以传入不同的对…

Glide讲解

目录 Glide简介Glide的优点Glide的生命周期Glide如何实现图片缓存的内存缓存实现原理磁盘缓存实现原理引入缓存的目的Glide缓存流程从内存缓存读取总结从磁盘缓存读取总结写入磁盘缓存写入内存缓存汇总 Glide源码总结图解with&#xff08;&#xff09;load&#xff08;&#xf…

Glide详解

现在Android上的图片加载框架非常成熟&#xff0c;从最早的老牌图片加载框架UniversalImageLoader&#xff0c;到后来Google推出的Volley&#xff0c;再到后来的新兴军Glide和Picasso&#xff0c;当然还有Facebook的Fresco。每一个都非常稳定&#xff0c;功能也都十分强大。但是…

Android Glide

1.Glide Glide是Google主导的图片加载开源库。它有很多优势&#xff1a; ①使用简单&#xff0c;链式调用。 ②支持多种图片格式&#xff0c;如Gif、WebP、缩略图、Video等。 ③支持生命周期集成。Glide可以感知调用页面的生命周期&#xff0c;根据Activity或Fragment的生命…