通过伪距单点定位解算卫星位置

该软件采用C++和Qt开发,实现快速卫星位置解算。通过对输入的导航文件解析,提取卫星数据,计算出卫星的详细轨道参数,并将结果保存到RESULT.csv文件。核心算法涉及地球物理常数、时间转换及几何参数的精确计算,确保了定位的准确性。

在这里插入图片描述
输入导航文件既可解算卫星位置,解算结果除了展示在结果区外,还会在工作目录下新建一个RESULT.csv文件。
软件通过c++结合qt开发,运行速度较快。
核心计算代码如下

.cpp文件
// An highlighted block
#pragma once
#include <iostream>
#include <regex>
#include <cctype>
#include "Satellites.h"
using namespace std;
#define U 3.986005e+14	// WGS-84 中地球引力常数
#define E 7.29211567e-5 // 地球自转速率

Satellites::Satellites(string path1, string path2)
{
   
   
    vector<string> prn;
    vector<vector<long double>> vt;								// 二维动态数组
    vector<long double> vi;										// 一维动态数组
    this->inFile.open(path1, ios::in);									// 打开文件
    this->oFile.open(path2, ios::out | ios::trunc);
    if (this->inFile && this->oFile)													// 若文件打开成功则继续下面操作
    {
   
   
        string s;												// 存放读取的每一行字符串
        smatch m;												// 存放正则匹配到的元素
        regex r("G\\d\\d.*|-?\\d.\\d{12}e[-+]\\d\\d");			// 正则匹配每个卫星单元
        regex r1("\\d{4}|\\d\\d|-?\\d\\.\\d{12}e[+-]\\d\\d");	// 正则匹配非首行
        int i = 0;
        while (getline(this->inFile, s))								// 打开文件
        {
   
   
            if (++i == 3220) break;
            if (regex_search(s, m, r))							// 匹配条件为 True 进入
                if (regex_search(s, m, regex("G\\d\\d")))		// 首行则进入
                {
   
   
                    prn.push_back(s.substr(0, 3));				// 将卫星 prn 推入
                    vt.push_back(vi);							// 将之前的遍历作为一个推入 vt
                    vi.clear();									// 清空vi,为下一次遍历做准备
                    for (sregex_iterator it(s.begin() + 3, s.end(), r1), end_it; it != end_it; ++it)	// sregex_iterator 正则迭代作用
                        vi.push_back(stold(it->str()));			// 将匹配的每一个参数转为浮点型再推入vi
                }
                else
                    for (sregex_iterator it(s.begin(), s.end(), r1),
                        end_it; it != end_it; ++it) vi.push_back(stold(it->str()));			// 将匹配的每一个参数转为浮点型再推入vi
        }
        vt.push_back(vi);	// 将最后一次遍历的值推入 vt
        // 写入文档首行条目
        this->oFile << "n" << "," << "tk" << "," << "mk" << "," << "ek" << "," << "vk" << "," << "pa" << "," << "cu" << "," <<
            "cr" << "," << "ci" << "," << "uk" << "," << "rk" << "," << "ik" << "," << "xk" << "," << "yk" << "," << "dk" <<
            "," << "Xk" << "," << "Yk" << "," << "Zk" << endl;

    }
    else cout << "打开文件失败!请关闭 Excel 后重试!" << endl;	// 若文件打开失败则提示
    //cout << prn.size() << " " << vt.size() << " " << vt[0][0]  << endl;
    for (int i = 1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值