【问题标题】:Java GRIB-Decoder: Extract data from GRIB2 filesJava GRIB-Decoder:从 GRIB2 文件中提取数据
【发布时间】:2016-11-26 10:13:59
【问题描述】:

我从这里下载了一些 grib 数据文件:ftp://data-portal.ecmwf.int/20160721000000/ (文件类型为 .bin) 并想在我的 Java 应用程序中从该文件中提取数据(我想加载稍后将提取的数据导入数据库)。我只是在尝试使用文件ftp://wmo:essential@data-portal.ecmwf.int/20160721000000/A_HWXE85ECEM210000_C_ECMF_20160721000000_24h_em_ws_850hPa_global_0p5deg_grib2.bin。

因此,我创建了一个新的 Java 项目并添加了两个库 grib-8.0.29.jar 和 netcdfAll-4.6.6.jar。可以在此处找到grib API 的文档:http://www.unidata.ucar.edu/software/decoders/grib/javadoc/。我需要打开下载的文件来获取数据。通过Grib2Dump 检索一些元数据似乎可行(见下文)。 Grib2Input 实例也是如此,我有一个有效的版本 2 的 GRIB 文件。

这是我用于检索一些元数据的工作代码:

public static void main(String[] args) throws IOException, InterruptedException {
        File srcDir = new File("C://test//");
        File[] localFiles = srcDir.listFiles();

        for (File tempFile : localFiles) {
             RandomAccessFile raf = new RandomAccessFile(tempFile.getAbsolutePath(), "r");

             System.out.println("======= Grib2GDSVariables ==========");
             Grib2GDSVariables gdsVariables = new Grib2GDSVariables(raf.readBytes(raf.read())); 
             System.out.println("Gds key : " + gdsVariables.getGdsKey());

             System.out.println("======= Grib2Input ==========");
             Grib2Input input = new Grib2Input(raf);
             System.out.println(Grib2Input.isValidFile(raf));
             System.out.println("scan : " + input.scan(true, true));
             System.out.println("getGDSs.size: " + input.getGDSs().size());
             System.out.println("getProducts.size: " + input.getProducts().size());
             System.out.println("getRecords.size: " + input.getRecords().size());
             System.out.println("edition: " + input.getEdition());

             System.out.println("======= Grib2Dump ==========");
             Grib2Dump dump = new Grib2Dump(); 
             dump.gribDump(new String[] {tempFile.getAbsolutePath()});

             System.out.println("======= Grib2ExtractRawData ==========");
             Grib2ExtractRawData extractRawData = new
             Grib2ExtractRawData(raf); extractRawData.main(new String[] {tempFile.getAbsolutePath()});
        }

        System.out.println("finished");
}

这会产生以下输出:

======= Grib2GDSVariables ==========
Gds key : -1732955898
======= Grib2Input ==========
true
scan : true
getGDSs.size: 0
getProducts.size: 0
getRecords.size: 0
edition: 2
======= Grib2Dump ==========
--------------------------------------------------------------------
                        Header : GRIB2
                    Discipline : 0 Meteorological products
                  GRIB Edition : 2
                   GRIB length : 113296
            Originating Center : 98 European Center for Medium-Range Weather Forecasts (RSMC)
        Originating Sub-Center : 0
Significance of Reference Time : 1 Start of forecast
                Reference Time : 2016-07-21T00:00:00Z
                Product Status : 0 Operational products
                  Product Type : 1 Forecast products
         Number of data points : 259920
                     Grid Name : 0 Latitude_Longitude
                     Grid Shape: 6 Earth spherical with radius of 6,371,229.0 m
Number of points along parallel: 720
Number of points along meridian: 361
                   Basic angle : 0
    Subdivisions of basic angle: -9999
  Latitude of first grid point : 90.0
 Longitude of first grid point : 0.0
  Resolution & Component flags : 48
                         Winds : True
   Latitude of last grid point : -90.0
  Longitude of last grid point : 359.5
         i direction increment : 0.5
         j direction increment : 0.5
                    Grid Units : degrees
                 Scanning mode : 0
            Product Definition : 2 Derived forecast on all ensemble members at a point in time
            Parameter Category : 2 Momentum
                Parameter Name : 1 Wind_speed
               Parameter Units : m s-1
       Generating Process Type : 4 Ensemble Forecast
                  ForecastTime : 24
            First Surface Type : 100 Isobaric surface
           First Surface value : 85000.0
           Second Surface Type : 255 Missing
          Second Surface value : -9.999E-252
======= Grib2ExtractRawData ==========
finished

我现在尝试了两天,但无法让它工作!我无法从文件中获取内容数据(纬度、经度、值)...

有人可以举一个Java的例子吗?

【问题讨论】:

    标签: java binaryfiles netcdf grib


    【解决方案1】:

    您不应该直接在 netCDF-java 中使用 GRIB 类。相反,使用

    NetcdfFile.open()
    

    这将使您可以通过 CDM 进行访问,为您提供一个包含变量和属性的简单界面。这里有教程:https://www.unidata.ucar.edu/software/thredds/current/netcdf-java/tutorial/NetcdfFile.html

    【讨论】:

    • 虽然我可以使用 panoply 打开我的 grib 文件,但使用非严格模式,我无法通过 Netcdffiles.open 打开它。它说我的文件不是有效的 cdm 文件。为什么会发生这种情况?
    • @Sami 我建议向 Unidata support-thredds 发送一张新票:unidata.ucar.edu/support/#request
    猜你喜欢
    • 2012-06-18
    • 2020-04-25
    • 2016-01-14
    • 2015-03-03
    • 2019-03-26
    • 2019-08-19
    • 2021-08-29
    • 2021-03-13
    • 2021-06-12
    相关资源
    最近更新 更多