GRIB—WMO二进制形式的一般规则分布信息

司机简称

GRIB

Driver built-in by default

This driver is built-in by default

GDAL支持GRIB1(读取)和GRIB2(读取和写入)格式的栅格数据,并支持公共坐标系、地理参考和其他元数据。GRIB格式是气象信息发布的常用格式,由世界气象组织传播。

GDAL GRIB驱动程序基于degrib应用程序的修改版本,该版本主要由NOAA NWS NDFD(MDL)的Arthur Taylor编写。degrib应用程序(和GDAL GRIB驱动程序)构建在g2clib GRIB解码库上,该库主要由NOAA NWS NCEP的John Huddleston编写。

GRIB2 files without projection on lon/lat grids have the peculiarity of using longitudes in the [0,360] range and wrapping around the antimeridian as opposed to the usual wrapping around the prime meridian of other raster datasets. Starting with GDAL 3.4.0, when reading such files, a transparent conversion of the longitudes to [-180,180] will be performed and the data will be rewrapped around the prime meridian - the split&swap mode. This behavior can be disabled by setting the GRIB_ADJUST_LONGITUDE_RANGE configuration option to NO.

GRIB格式的栅格数据有几种编码方案。最常见的应该支持包括PNG编码。如果GDAL也是通过GDAL JPEG2000驱动程序之一使用JPEG2000支持构建的,那么JPEG2000编码的GRIB文件通常会得到支持。

GRIB文件可以在GDAL中表示为具有多个频带,其中一些频带集表示时间序列。GRIB带表示为Float64(双精度浮点),与实际值无关。GRIB元数据根据波段元数据捕获,用于设置波段描述,类似于:

Description = 100000[Pa] ISBL="Isobaric surface"
  GRIB_UNIT=[gpm]
  GRIB_COMMENT=Geopotential height [gpm]
  GRIB_ELEMENT=HGT
  GRIB_SHORT_NAME=100000-ISBL
  GRIB_REF_TIME=  1201100400 sec UTC
  GRIB_VALID_TIME=  1201104000 sec UTC
  GRIB_FORECAST_SECONDS=3600 sec

GRIB2文件还可以包含其他元数据的提取,例如 identification sectionproduct definition 模板编号(GRIB_PDS_PDTN,八位字节8-9)和产品定义模板值(GRIB_PDS_template_NUMBERS,八位字节10+)作为如下元数据:

GRIB_DISCIPLINE=0(Meteorological)
GRIB_IDS=CENTER=7(US-NCEP) SUBCENTER=0 MASTER_TABLE=8 LOCAL_TABLE=1 SIGNF_REF_TIME=1(Start_of_Forecast) REF_TIME=2017-10-20T06:00:00Z PROD_STATUS=0(Operational) TYPE=1(Forecast)
GRIB_PDS_PDTN=32
GRIB_PDS_TEMPLATE_NUMBERS=5 7 2 0 0 0 0 0 1 0 0 0 0 1 0 31 1 29 67 140 2 0 0 238 217
GRIB_PDS_TEMPLATE_ASSEMBLED_VALUES=5 7 2 0 0 0 0 1 0 1 31 285 17292 2 61145

GRIBúu规程是在GDAL 2.3.0中添加的,它是 Discipline 消息第0节的字段。

GRIB_id是在GDAL 2.3.0中添加的,是 identification section /信息的第一部分。

GRIB_PDS_TEMPLATE_ASSEMBLED_值是在GDAL 2.3.0中添加的,并使用模板定义将几个字节组合在一起,使模板项成为16位或32位有符号/无符号整数,而GRIB_PDS_TEMPLATE_数则公开原始字节

驱动程序功能

Supports Georeferencing

This driver supports georeferencing

Supports VirtualIO

This driver supports virtual I/O operations (/vsimem/, etc.)

配置选项

本段列出了可设置为更改GRIB驱动程序默认行为的配置选项。

  • GRIBu NORMALIZEu UNITS=YES/NO:默认为YES。可以设置为“否”,以避免gdal将单位规格化为公制。默认情况下(GRIBu NORMALIZEu UNITS=YES),温度以摄氏度(°C)为单位报告。当GRIB_NORMALIZE_UNITS=NO时,它们以开氏度(°K)表示。

  • GRIB_RESOURCE_DIR=path : Path to a directory where grib2_*.csv tables are located. If not specified, the GDAL_DATA configuration option (or hard coded paths) used for all GDAL resources will be used.

打开选项

  • USE_IDX=YES/NO: (From GDAL 3.4) Enable automatic reading of external wgrib2 external index files when available. Default is YES. GDAL will look for a <GRIB>.idx in the same place as the dataset. These files when combined with careful usage of the API or the CLI tools allow a GRIBv2 file to be opened without reading all the bands. In particular, this allows an orders of magnitude faster extraction of select bands from large GRIBv2 files on remote storage (like NOMADS on AWS S3). In order to avoid unnecessary I/O only the text description of the bands should be accessed as accessing the metadata will require loading of the band header. gdal_translate is supported but gdalinfo is not. This option is ignored when using the multidimensional API (index is then ignored)

GRIB2写支持

GRIB2 write支持从GDAL 2.3.0开始就可用,通过CreateCopy()/GDAL_translate接口。

输入数据集的每个频带都被转换为GRIB2消息,并且所有频带都连接在一个文件中,这符合通常的做法。

输入数据集必须是地理参考,并且支持的投影是:地理经度/纬度、墨卡托1SP/2SP、横向墨卡托、极赤平极图、Lambert共形圆锥1SP/2SP、Albers圆锥等面积和Lambert方位等面积。

以下各节详细介绍了许多创建选项。这些创建选项对所有标注栏都有效。但是,通过定义使用相同键并以前缀为前缀的创建选项,可以以每个频带的方式覆盖这些全局设置 BAND_X_ 其中X是介于1和频带总数之间的频带数。例如BAND_1_PDS_PDTN

产品标识和定义

强烈建议用户提供必要的信息,以适当地填写 Section 0 / "Indicator"Section 1 / "Identification section"Section 4 / "Product definition section" 使用以下创建选项。否则,GDAL将填充默认值,但读者可能无法利用使用这些默认值生成的GRIB2数据集。

  • DISCIPLINE =整数:设置第0节的“规程”字段。有效值由 Table 0.0

    • 0:气象产品。默认值

    • 1: 水文产品

    • 2: 地表产品

    • 3、4:航天产品

    • 10: 海洋产品

  • IDS =字符串。用不同元素填充第1节/标识节的字段的字符串。该字符串的值通常将从现有GRIB产品的GRIB-IDS元数据项中检索。例如“IDS=CENTER=7(US-NCEP)SUBCENTER=0 MASTER_TABLE=8 SIGNF_REF_TIME=1(开始预测)REF_TIME=2017-10-20T06:00:00Z PROD_STATUS=0(操作)TYPE=1(预测)”。更正式地说,字符串的格式是带有空格分隔符的KEY=VALUE项列表。接受的密钥包括中心、子中心、主控表、签名参考时间、参考时间、生产状态和类型。只考虑数值部分(括号之间的精度将被忽略)。可以同时使用这个IDS创建选项和一个特定的IDS_xxx创建选项来覆盖IDS的潜在对应的xxx键。例如,在前面的示例中,如果同时定义了“IDS=CENTER=7(US-NCEP)…”和“IDS_CENTER=8”,则与一起使用的实际值为8。

  • IDS_CENTER =整数。根据 Table 0 . 默认为255/缺失

  • IDS_SUBCENTER =整数。根据 Table C . 默认为65535/缺失

  • IDS_MASTER_TABLE =整数。GRIB主表版本号,根据 Table 1.0 . 默认为2

  • IDS_SIGNF_REF_TIME =整数。参考时间的重要性,根据 Table 1.2 . 默认为0/分析

  • IDS_REF_TIME =日期时间为yyy-MM-DD [THH:毫米:SSZ] . 参考时间。默认值为1970-01-01T00:00:00Z

  • IDS_PROD_STATUS =整数。处理数据的生产状态,根据 Table 1.3 . 默认为255/缺失

  • IDS_TYPE =整数。处理数据的类型,根据 Table 1.4 . 默认为255/缺失

  • PDS_PDTN =整数。产品定义模板编号,根据 Table 4.0 . 默认值为0/在水平级别或水平层的某个时间点进行分析或预测。如果使用此默认模板编号,并且未指定任何PDS_template_编号或PDS_template_ASSEMBLED_值,则也将使用默认模板定义,其中大多数字段设置为缺失。

  • PDS_TEMPLATE_NUMBERS =字符串。产品定义模板原始编号。这是一个字节值列表(每个字节值介于0和255之间),用空格分隔。值的数量及其语义取决于PDS_PDTN指定的模板号,您必须参考 Table 4.0 . 使用现有GRIB2产品报告的GRIB PDS模板号作为此项的值可能更容易。如果驱动程序的读取端知道模板结构,则会尝试根据模板结构验证模板数(如果指定的元素多于所需的元素,则会发出警告,如果指定的元素少于所需的元素,则会出现错误)。也可以定义没有或部分由驱动程序的读取侧实现的模板。

  • PDS_TEMPLATE_ASSEMBLED_VALUES =字符串。产品定义模板组合值。这是一个用空格分隔的值列表(有符号/无符号的1、2或4字节宽整数的范围,具体取决于项)。值的数量及其语义取决于PDS_PDTN指定的模板号,您必须参考 Table 4.0 . 使用现有GRIB2产品报告的GRIB-PDS-u模板组装值作为此项的值可能更容易。PDS_TEMPLATE_number和PDS_TEMPLATE_ASSEMBLED_值是互斥的。要使用此创建选项,驱动程序的读取端必须知道模板结构。

数据编码

在GRIB2中,存在许多数据编码方案(参见 Section 5 / "Data representation section" ). 默认情况下,GDAL将选择适当的数据编码,以保留输入数据的范围。与 DATA_ENCODINGNBITSDECIMAL_SCALE_FACTORJPEG200_DRIVERCOMPRESSION_RATIOSPATIAL_DIFFERENCING_ORDER 创建选项。

用户可以使用以下创建选项覆盖这些默认值:

  • DATA_ENCODING =AUTO/SIMPLE_PACKING/COMPLEX_PACKING/IEEE_FLOATING_POINT/PNG/JPEG2000:选择 Data representation template number. Defaults to AUTO.

    • 在自动模式下,如果输入频带具有nodata值,则选择COMPLEX_PACKING。否则,如果输入频带数据类型为Float32或Float64,则选择IEEE_FLOATING_POINT。否则选择简单的包装。

    • SIMPLE_PACKING :在内部使用整数表示,具有偏移量和十进制和/或二进制缩放。所以可以用于任何数据类型。

    • 复合包装:简单包装与nodata处理的演变。默认情况下,a non-spatial differencing encoding is used ,但如果空间差异顺序=1或2, complex packing with spatial differencing 使用

    • IEEE_FLOATING_POINT :将值存储为IEEE-754单精度或双精度数字。

    • PNG :使用与简单打包相同的准备步骤,但使用整数值的PNG编码。

    • JPEG2000 :使用与简单打包相同的准备步骤,但使用整数值的JPEG2000编码。

  • NBITS =1到31之间的整数。每个采样值的位宽度。可能只会被一些数据编码松散地接受。如果未指定,则从整数数据类型的输入值范围自动计算位宽度,对于Float32/Float64,则默认为8。

  • DECIMAL_SCALE_FACTOR =整数值。输入值在整数编码前乘以10^DECIMAL_SCALE_FACTOR(解码时自动除以该值,因此这只影响精度)。例如,如果数据类型是温度,则对于浮点数据类型,可以使用十进制比例因子=1来指定数据的精度为1/10度。默认值为0(无预乘)

  • SPATIAL_DIFFERENCING_ORDER =0/1/2。仅用于复杂包装。定义空间差分的顺序。0表示值是独立编码的,1表示对连续值的差异进行编码,2表示对连续值的差异进行编码。默认为0

  • COMPRESSION_RATIO =1到100之间的整数值。对于无损JPEG2000编码,默认为1。仅用于JPEG2000编码。如果指定的值大于1,则使用有损JPEG2000压缩。该值表示与未压缩数据相关的所需压缩因子。例如,值10表示所需的JPEG2000码流应比相应的未压缩文件小10倍(每像素NBITS位)。

  • JPEG2000_DRIVER =JP2KAK/JP2OPENJPEG/JPEG2000/JP2ECW(可能的值取决于GDAL构建中实际可用的JPEG2000驱动程序)。指定应使用哪个JPEG2000驱动程序。如果未指定,则按枚举中给定的顺序搜索驱动程序。

数据单位

GRIB内部以国际单位(即公制)存储值。所以温度必须以开尔文度来存储。但在驱动程序的读取端,具有温度的字段以摄氏度为单位显示(除非GRIB_NORMALIZE_UNITS配置选项设置为NO)。为了保持一致性,驱动程序的写入端还假设温度(如果产品定义模板的第一个值,即 参数类别 为0=温度)输入数据集中的值将以摄氏度为单位,并将自动将其偏移为开尔文度。可以通过设置 INPUT_UNIT 创建选项为C(代表摄氏度)或K(代表开尔文)。默认值是C。

GRIB2到GRIB2转换

如果GRIB2到GRIB2的转换是使用gdal_translate(或CreateCopy())完成的,则默认情况下将使用GRIB_规程、GRIB_id、GRIB_PDS_PDTN和GRIB_PDS_TEMPLATE_NUMBERS源数据集条带的元数据项(除非创建选项覆盖它们)。

十进制比例因子和NBITS也将尝试从GRIB特殊元数据域中检索。

实例

gdal_translate in.tif out.grb2 -of GRIB \
    -co "IDS=CENTER=8(US-NWSTG) SIGNF_REF_TIME=1(Start_of_Forecast) REF_TIME=2008-02-21T17:00:00Z PROD_STATUS=0(Operational) TYPE=1(Forecast)" \
    -co "PDS_PDTN=8" \
    -co "PDS_TEMPLATE_ASSEMBLED_VALUES=0 5 2 0 0 255 255 1 43 1 0 0 255 -1 -2147483647 2008 2 23 12 0 0 1 0 3 255 1 12 1 0"

参见:

信用

加拿大气象局资助了对GRIB2写入能力的支持。