GNSS数据下载——GAMP GOOD修改

首先很感谢周老师开源的数据下载程序,但是对于做导航相关的同学来说,我有一个想法~

输入观测文件,通过读取观测文件的头文件起始时间和结束时间,就下到对应天数的产品

(我是懒狗,其实对于我个人来说,我不需要过多的产品,只需要自己喜欢的产品即可,并且所有产品下载到一个文件里就好了)

1、头文件读取

static bool readobshead(const std::string& filename,std::vector<int>&start_time,int &doy){
    std::vector<int>last_time= {0,0,0,0,0,0};
    doy = 0;
    std::fstream obsfile(filename);
    if (!obsfile.is_open()) {
        std::cerr << "Failed to open obs file: " << filename << std::endl;
        return false;
    }
    std::string str_line = "";
    std::istringstream temp(str_line);
    while (getline(obsfile, str_line)) {
        if(str_line.find("TIME OF FIRST OBS") != std::string::npos)
        {
            std::istringstream iss(str_line);
            iss >> start_time[0] >> start_time[1]  >> start_time[2]
                    >> start_time[3]  >> start_time[4] >>start_time[5] ;
            continue;
        }

        if (str_line.find("TIME OF LAST OBS") != std::string::npos) {
            std::istringstream iss(str_line);
            iss >> last_time[0] >> last_time[1] >> last_time[2]
                >> last_time[3] >> last_time[4] >> last_time[5];
            continue;
        }
        if (str_line.find("END OF HEADER") != std::string::npos) {
            break;
        }
    }
    doy = daysPassed(start_time,last_time);
    if(doy != 0){
        return true;
    }else{
        return false;
    }
}

很简单的头文件读取,输出文件的路径,计算起始时间和doy也就是年积日

2、通过起始时间和结束时间让其支持跨天

static int daysPassed(const std::vector<int>& start_time,const std::vector<int> & end_time) {

    // 判断是否跨天
    if (start_time[0] == end_time[0] && start_time[1] == end_time[1] && start_time[2] == end_time[2]) {
        return 1; // 同一天
    } else {
        return end_time[2] - start_time[2] + 1; // 跨天
    }
}

3、判断是不是观测文件(这里按照文件末尾是不是o与O进行判断)

static bool endsWithO(const std::string& filename) {
    if (!filename.empty()) {
        char lastChar = filename.back(); // 获取文件名的最后一个字符
        return (lastChar == 'O' || lastChar == 'o');
    }
    return false;
}

4、通过观测文件路径推断出此文件的所外路径

也就是D:data\o推断出D:data,数据下载到这个路径下

static std::string extractFolderPath(const std::string& filepath) {
    // 寻找最后一个 '\' 字符的位置
    size_t found = filepath.find_last_of("\\");
    if (found != std::string::npos) {
        // 返回路径部分
        return filepath.substr(0, found);
    } else {
        // 如果没有找到 '\' 字符,返回空字符串
        return "";
    }
}

5、修改程序的主入口程序

这样我们就可以支持下载多个观测文件的数据啦,同时也不影响原先配置文件

int main(int argc, char * argv[]) {
    if (argc < 2) {
        std::cout << std::endl;
        Logger::Trace(TEXPORT, "* Usage: run_GOOD GOOD_cfg.yaml [file1] [file2] ... [fileN]");
        std::cout << std::endl;
        return -1;
    }

    Logger::Trace(TEXPORT, "GAMP II: intelliGent Analysis system for Multi-sensor integrated navigation and Positioning v2.0");
    Logger::Trace(TEXPORT, "===================================================================================================");

    for (int i = 1; i < argc; ++i) {
        std::string cfgfile = argv[i];
        bool readobs =
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值