当前位置: 首页 > 知识库问答 >
问题:

从NetCDF 4.5 Grib2Record中提取天气预报数据

於彬
2023-03-14

更新:修改了这个问题,以更好地反映我目前的理解。

我有一个NetCDF 4.5版本的Grib2记录对象。给定一个(x,y)网格点和一个变量名,我想从对象中按预测时间提取该变量的所有预测数据(如果记录包含该变量的预测)。由于写入磁盘索引文件的默认行为,我不想使用更高级别的NetCDFFile接口。

我尝试过查看底层代码(Grib2Rectilyser,Grib2Customizer等)。)但是代码太密集了,我正在寻找从哪里开始的帮助。

我将感谢任何关于如何获取Grib2记录和1的指针。检查其中是否包含特定的预测变量,如果是,则通过给定x-y网格点和z级别的预测有效时间提取预测数据。

共有1个答案

柴深
2023-03-14

我使用grib2文件进行风力预测,这就是我获取记录的方式以及如何处理它以获得风(V U组件)

Grib2Input input = new Grib2Input(getRandomAccessFile());
if (!input.scan(false, false)) {
    logger.error("Failed to successfully scan grib file");
    return;
}
Grib2Data data = new Grib2Data(getRandomAccessFile());

List<Grib2Record> records = input.getRecords();

for (Grib2Record record : records) {    
    Grib2IndicatorSection is = record.getIs();
    Grib2IdentificationSection id = record.getId();
    Grib2Pds pdsv = record.getPDS().getPdsVars();
    Grib2GDSVariables gdsv = record.getGDS().getGdsVars();

    long time = id.getRefTime() + (record.getPDS().getForecastTime() * 3600000);

    logger.debug("Record description at " + pdsv.getReferenceDate() + " forecast "
    + new Date(time)    + ": " + ParameterTable.getParameterName(is.getDiscipline(), pdsv.getParameterCategory(), pdsv.getParameterNumber()));

    float[] values = data.getData(record.getGdsOffset(), record.getPdsOffset(), 0);

     if ((is.getDiscipline() == 0) && (pdsv.getParameterCategory() == 2) && (pdsv.getParameterNumber() == 2)) {
        // U-component_of_wind
        int c = 0;
        for (double lat = gdsv.getLa1(); lat >= gdsv.getLa2(); lat = lat - gdsv.getDy()) {
            for (double lon = gdsv.getLo1(); lon <= gdsv.getLo2(); lon = lon + gdsv.getDx()) {
                logger.debug(lat + "\t" + lon + "\t" +
                values[c]);
                c++;
            }
        }
    } else if ((is.getDiscipline() == 0) && (pdsv.getParameterCategory() == 2) && (pdsv.getParameterNumber() == 3)) {
        // V-component_of_wind
        int c = 0;
        for (double lat = gdsv.getLa1(); lat >= gdsv.getLa2(); lat = lat - gdsv.getDy()) {
            for (double lon = gdsv.getLo1(); lon <= gdsv.getLo2(); lon = lon + gdsv.getDx()) {
                logger.debug(lat + "\t" + lon + "\t" +
                values[c]);
                c++;
            }
        }
    }
}
private RandomAccessFile getRandomAccessFile() {
    RandomAccessFile raf = null;
    try {
        raf = new RandomAccessFile(path, "r");
        raf.order(RandomAccessFile.BIG_ENDIAN);
    } catch (IOException e) {
        logger.error("Error opening file " + path, e);
    }
    return raf;
}
 类似资料:
  • 21.1 注册免费API和阅读文档 本节通过一个API接口(和风天气预报)爬取天气信息,该接口为个人开发者提供了一个免费的预报数据(有次数限制)。 首先访问和风天气网,注册一个账户。注册地址:https://console.heweather.com/ 在登陆后的控制台中可以看到个人认证的key(密钥),这个key就是访问API接口的钥匙。 获取key之后阅读API文档:https://www.h

  • 你好:)我正在写一个电报机器人,显示今天和明天的天气。作为我正在使用的数据openweathermap.org. 现在,我使用了getTodaysWeather方法从JSON中获取有关Java对象的信息http://www.jsonschema2pojo.org并写道: 现在,我需要编写一个方法,从JSON数据中获取明天的天气数据http://api.openweathermap.org/data

  • 我想使用R从每个位置(X和Y)的Netcdf数据集中提取时间序列数据并将其转换为csv文件。这是我第一次处理NetCDF数据。有人能告诉我使用R或Matlab的相关代码吗? 这是我的数据描述: IRI FD季节性预测降水问题:Tercile概率数据 独立变量(网格): Tercile Classes网格:/C(ids)无序[(低于正常)(正常)(高于正常)]:发布的网格月份预测 网格:/F(自19

  • 利用json解析返回天气信息。 [Code4App.com]

  • 这是一个开源的、基于jQuery 函数库的 JavaScript 天气预报脚本插件。 代码语法完全符合W3C网页标准,完全兼容各种主流浏览器。 本插件主要用于天气预报的展示。 jQuery weather v3.0.0( 2013-03-01 ) + 此版本开放源代码,允许二次修改 + 此版本改为纯Javascript版本,不再依赖于PHP. + 支持全世界所有城市(以前版本仅支持中国城市) +

  • 本文向大家介绍PHP调用全国天气预报数据接口查询天气示例,包括了PHP调用全国天气预报数据接口查询天气示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP调用全国天气预报数据接口查询天气。分享给大家供大家参考,具体如下: 基于PHP的聚合数据全国天气预报API服务请求的代码样例 本代码示例是基于PHP的聚合数据全国天气预报API服务请求的代码样例,使用前你需要: ①:通过https: