跳转到主要内容

NOAA 高分辨率快速更新 (HRRR) stactools 包

项目描述

stactools-noaa-hrrr

PyPI GitHub Workflow Status (with event)

wind speed forecast from 2024-05-10T12:00:00Z for 2024-05-10T14:00:00Z

此包可用于为NOAA高分辨率快速更新(HRRR)大气预报数据集生成STAC元数据。

数据已上传到AWS、Azure和Google云存储,您可以使用stactools.noaa_hrrr.stac函数中的cloud_provider参数选择您想要的云提供商,以使用gribindex href。

背景

NOAA HRRR数据集 是一个持续更新的大气预报数据产品。

数据结构

  • 有两个区域:CONUS 和 Alaska
  • 每小时,为每个区域生成新的每小时预报,包括许多大气属性
    • 所有小时(00-23)在conus区域都会获得18小时的预报
    • alaska区域,每3小时生成一次预报(000306等)
    • 00061218小时会生成48小时的预报
    • 产品之一(subh)获得15分钟的预报(每小时每个属性有四个),但子小时预报作为单一代码为2文件中的一个层存储,而不是单独的文件。
  • 预报被分为4个产品(sfcprsnatsubh
  • 每个GRIB2文件有数百到数千个变量
  • 每个.grib2文件都附有.grib2.idx文件,其中包含变量级元数据,包括该变量数据的起始字节(用于制作范围请求而不是读取整个文件)和一些其他描述性元数据

组织STAC元数据的考虑事项摘要

经过广泛讨论,我们决定以以下结构组织STAC元数据

  1. 集合:为每个区域-产品组合创建单独的集合

    • 区域:conusalaska
    • 产品:sfcprsnatsubh
  2. 项目:存档中的每个GRIB文件都表示为一个项目,包含两个资产

    • "grib":包含实际数据。
    • "index":.grib2.idx辅助文件。

    每个GRIB文件包含从参考时间开始到特定预报小时的整个产品的所有变量的预报,因此您需要组合多个项目中的数据来构建一个预报的时间序列。

  3. grib:layers:在"GRIB"资产内部,grib:layers属性详细说明了每个层的详细信息,包括描述、单位和字节范围。这使应用程序能够在不下载整个文件的情况下访问GRIB2文件中的特定部分。

    • 我们打算在测试了其他GRIB2数据集上的此规范之后,提出一个包含grib:layers属性的GRIB STAC扩展来存储字节范围。
    • 层级元数据值得存储在STAC中,因为您可以使用/vsisubfilevrt://来构造GDAL可以读取的特定层URI。
      • /vsisubfile/{start_byte}_{byte_size},/vsicurl/{grib_href}
      • vrt:///vsicurl/{grib_href}?bands={grib_message},其中grib_message是GRIB2文件中层的索引。
        • 在底层,GDAL的vrt驱动程序正在读取辅助的.grib2.idx文件并将其转换为/vsisubfile URI。

优点

  • 应用程序可以使用grib:layers创建层特定数据集,从而便于高效的数据处理。
  • 按区域和产品分割可以定义连贯的集合级数据立方体元数据,提高可访问性。

缺点

  • 在STAC元数据中存储字节范围等层级元数据会导致STAC项目膨胀,因为每个GRIB2文件中有数百到数千个层。

有关更多详细信息,请参阅相关的问题讨论和拉取请求#3#6

STAC示例

Python使用示例

  • 查看示例笔记本,了解如何创建STAC元数据以及如何使用带有grib:layers元数据的STAC项目将数据加载到xarray中。

安装

使用pip安装stactools-noaa-hrrr

pip install stactools-noaa-hrrr

命令行使用

创建集合对象

stac noaahrrr create-collection {region} {product} {cloud_provider} {destination_file}

例如。

stac noaahrrr create-collection conus sfc azure example-collection.json

创建项目

stac noaahrrr create-item \
  {region} \
  {product} \
  {cloud_provider} \
  {reference_datetime} \
  {forecast_hour} \
  {destination_file}

例如。

stac noaahrrr create-item conus sfc azure 2024-05-01T12 10 example-item.json

创建日期范围内的所有项目

stac noaahrrr create-item-collection \
  {region} \
  {product} \
  {cloud_provider} \
  {start_date} \
  {end_date} \
  {destination_folder}

例如。

stac noaahrrr create-item-collection conus sfc azure 2024-05-01 2024-05-31 /tmp/items

Docker

您可以使用以下命令在具有所有依赖项的docker容器中启动jupyterhub服务器

docker/build
docker/jupyter

使用stac noaahrrr --help查看所有子命令和选项。

贡献

我们使用 pre-commit 来检查任何更改。为了设置您的开发环境

pip install -e '.[dev]'
pre-commit install

检查所有文件

pre-commit run --all-files

运行测试

pytest -vv

如果您已更新STAC元数据输出,请更新示例

scripts/update-examples

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。

源分布

stactools_noaa_hrrr-0.1.2.tar.gz (1.1 MB 查看哈希值)

上传时间

构建分布

stactools_noaa_hrrr-0.1.2-py3-none-any.whl (1.1 MB 查看哈希值)

上传时间 Python 3

由以下支持