本地文件

本地文件#

本地文件 是支持 POSIX 协议通过文件路径访问的文件,包括但不限于:

  • 本机存储系统中的文件

  • 共享存储系统中的文件,例如超算平台的存储系统

  • 网络挂载存储中的文件,例如挂载的二级存储

cedarkit 工具套件中数据准备工具库 reki 支持从文件系统中加载要素场。

本节介绍 reki 库基本使用方法,随后几个章节介绍其他支持加载 GRIB2 要素场的工具库如何与 cedarkit-maps 对接,包括:

reki#

reki 库的 reki.data_finder 模块包含本地文件查找函数 find_local_file,可以使用内置的配置文件查找 CMA 超算平台中的 CEMC 业务系统数据产品。

reki 库的 reki.format.grib 模块包含要素加载函数 load_field_from_file,支持从本地文件中加载一个要素场。

导入需要的包

import xarray as xr
import pandas as pd
from reki.data_finder import find_local_file
from reki.format.grib import load_field_from_file

设置绘图的数据参数,使用 CMA-GEPS 2024 年 4 月 1 日 00 时次 024 时效集合成员 1 的数据。

system_name = "CMA-GEPS"
data_type = "cma_geps/grib2/orig"
start_time = pd.to_datetime("2024-04-01 00:00:00")
forecast_time = pd.to_timedelta("24h")
number = 1

加载数据#

查找 GRIB2 数据文件的路径

file_path = find_local_file(
    data_type,
    start_time=start_time,
    forecast_time=forecast_time,
    number=1,
)
file_path
PosixPath('/g3/COMMONDATA/OPER/CEMC/GEPS/Prod-grib/2024040100/grib2/gef.gra.001.2024040100024.grb2')

加载 2 米温度要素场。

t_2m_field = load_field_from_file(
    file_path,
    parameter="2t",  
) - 273.15
t_2m_field
<xarray.DataArray '2t' (latitude: 360, longitude: 720)> Size: 2MB
array([[-27.13763672, -23.05763672, -23.02763672, ..., -23.07763672,
        -23.04763672, -23.01763672],
       [-25.99763672, -22.87763672, -22.89763672, ..., -22.90763672,
        -22.88763672, -22.87763672],
       [-26.66763672, -22.93763672, -23.02763672, ..., -22.99763672,
        -22.98763672, -22.97763672],
       ...,
       [-45.65763672, -45.31763672, -45.74763672, ..., -45.70763672,
        -45.76763672, -46.06763672],
       [-45.68763672, -45.85763672, -45.95763672, ..., -46.42763672,
        -45.62763672, -45.88763672],
       [-45.27763672, -46.06763672, -45.97763672, ..., -45.56763672,
        -45.53763672, -46.02763672]])
Coordinates:
    time               datetime64[ns] 8B 2024-04-01
    step               timedelta64[ns] 8B 1 days
    valid_time         datetime64[ns] 8B 2024-04-02
    heightAboveGround  int64 8B 2
  * latitude           (latitude) float64 3kB 89.75 89.25 ... -89.25 -89.75
  * longitude          (longitude) float64 6kB 0.0 0.5 1.0 ... 358.5 359.0 359.5
    number             int64 8B 1

绘图#

使用 cedarkit-maps 绘制 2 米温度填充图

Hide code cell source
from cedarkit.maps.style import ContourStyle
from cedarkit.maps.chart import Panel
from cedarkit.maps.domains import EastAsiaMapDomain
from cedarkit.maps.colormap import get_ncl_colormap

t_2m_level = [-24, -20, -16, -12, -8, -4, 0, 4, 8, 12, 16, 20, 24, 28, 32]
color_index = [2, 12, 22, 32, 42, 52, 62, 72, 82, 92, 102, 112, 122, 132, 142, 152]
t_2m_color_map = get_ncl_colormap("BlAqGrYeOrReVi200", index=color_index)
t_2m_style = ContourStyle(
    colors=t_2m_color_map,
    levels=t_2m_level,
    fill=True,
)
domain = EastAsiaMapDomain()
panel = Panel(domain=domain)
panel.plot(t_2m_field, style=t_2m_style)
domain.set_title(
    panel=panel,
    graph_name="2m Temperature (C)",
    system_name=system_name,
    start_time=start_time,
    forecast_time=forecast_time,
)
domain.add_colorbar(panel=panel, style=t_2m_style)
panel.show()
../../_images/78ab00d1a252e14099fc9ecddb361e4d0d4392fa72f9ae77a218ad00a2126981.png