获取欧洲气象预报数据,以及解析其预报数据

1.简介

        可以实现在线下载欧洲公开预报数据,本帖以下载指定区域降雨量数据为例

        本人亲测,完全可以正常拉取以及解析入库(如有问题可以留言)

2.公开数据下载地址

        欧洲公开气象预报数据链接地址

         同一时间段内他有两个数据格式文件,grib2文件代表的是气象数据文件,index代表的是各种类型所对应的索引

3.下载数据相关参数介绍

        官网解释地址:ECMWF开放数据:来自IFS和AIFS的实时预测 - 数据和图表 - ECMWF Confluence Wiki

以上地址中有关于各个文件包含的数据内容,可以根据该提示选择自己所需要的数据

4.文件解析

        3.1工具下载: wgrib2(下载地址)
        3.2 指令介绍
由于grib2文件数据集比较大,我是先将所需要的区域进行提取出来在进行分析处理

1.按照经纬度,只提取自己所需区域(执行命令需要在wgrib目录下执行,或者cd 进入到该目录下)
wgrib3 20240322000000-0h-oper-fc.grib2 -small_grib 102:104 24:27 D:\\OZ\\custom.grib2

2.筛选出自己所需数据类型(193是过滤降雨的相关数据)
wgrib3 -s D:\\OZ\\custom.grib2 | findstr "parm=193" | wgrib3 -i D:\\OZ\\custom.grib2 -csv D:\ozGribFile\20240321\result.csv

3.代码进行csv文件读取,进行数据处理以及入库分析
使用的辅助jar包(junit-jupiter-api-5.3.2.jar)
public List<String[]> parseCSV(String fileName) {
    CsvParserSettings parserSettings = new CsvParserSettings();
    parserSettings.setLineSeparatorDetectionEnabled(true);
    RowListProcessor rowListProcessor = new RowListProcessor();
    parserSettings.setProcessor((Processor)rowListProcessor);
    parserSettings.setHeaderExtractionEnabled(true);
    parserSettings.setLineSeparatorDetectionEnabled(true);
    CsvParser parser = new CsvParser(parserSettings);
    parser.parse(new File(fileName));
    String[] headers = rowListProcessor.getHeaders();
    List<String[]> rows = rowListProcessor.getRows();
    return rows;
  }

然后进行数据读取,以及相关入库操作



<---关于java代码执行cmd指令代码示例:(如果大佬们有更好的改进,希望指点一下,3q)--->
saveFilePath -> 文件下载保存路径
String[] cmd = new String[6];
        cmd[0] = "cmd ";
        cmd[1] = "/c ";
        cmd[2] = "start ";
        cmd[3] = "E:\\elitel\\FtpGRB\\wgrib";//替换为自己wgrib程序所在位置
        cmd[4] = " wgrib3 " + saveFilePath + " -small_grib 102:104 24:27 " + saveFilePath.replace(".","_small.");
        cmd[5] = " wgrib3 " + saveFilePath.replace(".","_small.") + " | findstr \"193\" | wgrib3 -i "+saveFilePath.replace(".","_small.")+" -csv " + CsvPath;

        System.out.println("cmd命令开始执行!!!");
        Process p1 = execCMD(cmd, 4);
        p1.waitFor();
        Process p2 = execCMD(cmd, 5);
        p2.waitFor();
        System.out.println("cmd命令执行结束!!!" );
        System.out.println("文件处理完成" + CsvPath);
        /*
            进行相关csv文件分析,以及入库等后续操作
        */
    }

    @NotNull
    private Process execCMD(String[] cmd, int i) throws IOException {
        Process p1 = Runtime.getRuntime().exec(cmd[0] + cmd[1] + cmd[i], (String[]) null, new File(cmd[3]));
        BufferedReader br = new BufferedReader(new InputStreamReader(p1.getInputStream()));
        String line;
        while ((line = br.readLine()) != null)
            System.out.println(line);
        return p1;
    }

              

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值