import numpy as np
import pandas as pd
import xarray as xr
from reki.format.grib.eccodes import load_field_from_file/home/wangdp/project/cedarkit/notebook-project/notebook-devel/repo/data-notebook-project/data-notebook/.venv/lib/python3.14/site-packages/gribapi/__init__.py:23: UserWarning: ecCodes 2.42.0 or higher is recommended. You are running version 2.34.1
warnings.warn(
from data_notebook.data import get_data_file
geps_grib2_orig_file_path = get_data_file("cma-geps")
geps_grib2_orig_file_pathPosixPath('/home/wangdp/project/cedarkit/notebook-project/notebook-devel/repo/data-notebook-project/data-notebook/data/cma-geps/grib2/orig/Z_NAFP_C_BABJ_20260811000000_P_NWPC-GRAPES-GEPS-GLB-02400-m001.grib2')近地面与地面要素¶
10米U风¶
| 要素名 | cemc | wgrib2 | eccodes | GRIB Key | 层次类型 | 层次 | 编号 |
|---|---|---|---|---|---|---|---|
| 10米U风 | u10m | UGRD | 10u | (0, 2, 2) | heightAboveGround | 10 | 86 |
field = load_field_from_file(
geps_grib2_orig_file_path,
parameter="UGRD",
level_type="heightAboveGround",
level=10,
lazy=True
)
assert field.attrs["GRIB_count"] == 86field = load_field_from_file(
geps_grib2_orig_file_path,
parameter="10u",
lazy=True
)
assert field.attrs["GRIB_count"] == 86field = load_field_from_file(
geps_grib2_orig_file_path,
parameter="u10m",
lazy=True
)
assert field.attrs["GRIB_count"] == 86field = load_field_from_file(
geps_grib2_orig_file_path,
parameter={"discipline": 0, "parameterCategory": 2, "parameterNumber": 2},
level_type="heightAboveGround",
level=10,
lazy=True
)
assert field.attrs["GRIB_count"] == 8610米V风¶
| 要素名 | cemc | wgrib2 | eccodes | GRIB Key | 层次类型 | 层次 | 编号 |
|---|---|---|---|---|---|---|---|
| 10米V风 | v10m | VGRD | 10v | (0, 2, 3) | heightAboveGround | 10 | 87 |
field = load_field_from_file(
geps_grib2_orig_file_path,
parameter="VGRD",
level_type="heightAboveGround",
level=10,
lazy=True
)
assert field.attrs["GRIB_count"] == 87field = load_field_from_file(
geps_grib2_orig_file_path,
parameter="10v",
lazy=True
)
assert field.attrs["GRIB_count"] == 87field = load_field_from_file(
geps_grib2_orig_file_path,
parameter="v10m",
lazy=True
)
assert field.attrs["GRIB_count"] == 87field = load_field_from_file(
geps_grib2_orig_file_path,
parameter={"discipline": 0, "parameterCategory": 2, "parameterNumber": 3},
level_type="heightAboveGround",
level=10,
lazy=True
)
assert field.attrs["GRIB_count"] == 872米温度¶
| 要素名 | cemc | wgrib2 | eccodes | GRIB Key | 层次类型 | 层次 | 编号 |
|---|---|---|---|---|---|---|---|
| 2米温度 | t2m | TMP | 2t | (0, 0, 0) | heightAboveGround | 2 | 88 |
field = load_field_from_file(
geps_grib2_orig_file_path,
parameter="TMP",
level_type="heightAboveGround",
level=2,
lazy=True
)
assert field.attrs["GRIB_count"] == 88field = load_field_from_file(
geps_grib2_orig_file_path,
parameter="2t",
lazy=True
)
assert field.attrs["GRIB_count"] == 88field = load_field_from_file(
geps_grib2_orig_file_path,
parameter="t2m",
lazy=True
)
assert field.attrs["GRIB_count"] == 88field = load_field_from_file(
geps_grib2_orig_file_path,
parameter={"discipline": 0, "parameterCategory": 0, "parameterNumber": 0},
level_type="heightAboveGround",
level=2,
lazy=True
)
assert field.attrs["GRIB_count"] == 88海平面气压¶
| 要素名 | cemc | wgrib2 | eccodes | GRIB Key | 层次类型 | 层次 | 编号 |
|---|---|---|---|---|---|---|---|
| 海平面气压 | psl | PRMSL | prmsl | (0, 3, 1) | meanSea | - | 89 |
field = load_field_from_file(
geps_grib2_orig_file_path,
parameter="PRMSL",
lazy=True
)
assert field.attrs["GRIB_count"] == 89field = load_field_from_file(
geps_grib2_orig_file_path,
parameter="prmsl",
lazy=True
)
assert field.attrs["GRIB_count"] == 89field = load_field_from_file(
geps_grib2_orig_file_path,
parameter="psl",
lazy=True
)
assert field.attrs["GRIB_count"] == 89field = load_field_from_file(
geps_grib2_orig_file_path,
parameter={"discipline": 0, "parameterCategory": 3, "parameterNumber": 1},
lazy=True
)
assert field.attrs["GRIB_count"] == 89地面气压¶
| 要素名 | cemc | wgrib2 | eccodes | GRIB Key | 层次类型 | 层次 | 编号 |
|---|---|---|---|---|---|---|---|
| 地面气压 | ps | PRES | sp | (0, 3, 0) | surface | - | 90 |
field = load_field_from_file(
geps_grib2_orig_file_path,
parameter="PRES",
lazy=True
)
assert field.attrs["GRIB_count"] == 90field = load_field_from_file(
geps_grib2_orig_file_path,
parameter="sp",
lazy=True
)
assert field.attrs["GRIB_count"] == 90field = load_field_from_file(
geps_grib2_orig_file_path,
parameter="ps",
lazy=True
)
assert field.attrs["GRIB_count"] == 90field = load_field_from_file(
geps_grib2_orig_file_path,
parameter={"discipline": 0, "parameterCategory": 3, "parameterNumber": 0},
lazy=True
)
assert field.attrs["GRIB_count"] == 902米相对湿度¶
| 要素名 | cemc | wgrib2 | eccodes | GRIB Key | 层次类型 | 层次 | 编号 |
|---|---|---|---|---|---|---|---|
| 2米相对湿度 | rh2m | RH | 2r | (0, 1, 1) | heightAboveGround | 2 | 91 |
field = load_field_from_file(
geps_grib2_orig_file_path,
parameter="RH",
lazy=True
)
assert field.attrs["GRIB_count"] == 91field = load_field_from_file(
geps_grib2_orig_file_path,
parameter="2r",
lazy=True
)
assert field.attrs["GRIB_count"] == 91field = load_field_from_file(
geps_grib2_orig_file_path,
parameter="rh2m",
lazy=True
)
assert field.attrs["GRIB_count"] == 91field = load_field_from_file(
geps_grib2_orig_file_path,
parameter={"discipline": 0, "parameterCategory": 1, "parameterNumber": 1},
lazy=True
)
assert field.attrs["GRIB_count"] == 91地形高度¶
| 要素名 | cemc | wgrib2 | eccodes | GRIB Key | 层次类型 | 层次 | 编号 |
|---|---|---|---|---|---|---|---|
| 地形高度 | zs | HGT | orog | (0, 3, 5) | surface | - | 92 |
field = load_field_from_file(
geps_grib2_orig_file_path,
parameter="HGT",
level_type="sfc",
lazy=True
)
assert field.attrs["GRIB_count"] == 92field = load_field_from_file(
geps_grib2_orig_file_path,
parameter="orog",
lazy=True
)
assert field.attrs["GRIB_count"] == 92field = load_field_from_file(
geps_grib2_orig_file_path,
parameter="zs",
lazy=True
)
assert field.attrs["GRIB_count"] == 92field = load_field_from_file(
geps_grib2_orig_file_path,
parameter={"discipline": 0, "parameterCategory": 3, "parameterNumber": 5},
level_type="sfc",
lazy=True
)
assert field.attrs["GRIB_count"] == 92降水¶
对流降水¶
| 要素名 | cemc | wgrib2 | eccodes | GRIB Key | 层次类型 | 层次 | 编号 |
|---|---|---|---|---|---|---|---|
| 对流降水 | rainc | ACPCP | acpcp | (0, 1, 10) | surface | - | 93 |
field = load_field_from_file(
geps_grib2_orig_file_path,
parameter="ACPCP",
lazy=True
)
assert field.attrs["GRIB_count"] == 93field = load_field_from_file(
geps_grib2_orig_file_path,
parameter="acpcp",
lazy=True
)
assert field.attrs["GRIB_count"] == 93field = load_field_from_file(
geps_grib2_orig_file_path,
parameter="rainc",
lazy=True
)
assert field.attrs["GRIB_count"] == 93field = load_field_from_file(
geps_grib2_orig_file_path,
parameter={"discipline": 0, "parameterCategory": 1, "parameterNumber": 10},
lazy=True
)
assert field.attrs["GRIB_count"] == 93大尺度降水¶
| 要素名 | cemc | wgrib2 | eccodes | GRIB Key | 层次类型 | 层次 | 编号 |
|---|---|---|---|---|---|---|---|
| 大尺度降水 | rainnc | NCPCP | ncpcp | (0, 1, 9) | surface | - | 94 |
field = load_field_from_file(
geps_grib2_orig_file_path,
parameter="NCPCP",
lazy=True
)
assert field.attrs["GRIB_count"] == 94field = load_field_from_file(
geps_grib2_orig_file_path,
parameter="ncpcp",
lazy=True
)
assert field.attrs["GRIB_count"] == 94field = load_field_from_file(
geps_grib2_orig_file_path,
parameter="rainnc",
lazy=True
)
assert field.attrs["GRIB_count"] == 94field = load_field_from_file(
geps_grib2_orig_file_path,
parameter={"discipline": 0, "parameterCategory": 1, "parameterNumber": 9},
lazy=True
)
assert field.attrs["GRIB_count"] == 94总降水¶
| 要素名 | cemc | wgrib2 | eccodes | GRIB Key | 层次类型 | 层次 | 编号 |
|---|---|---|---|---|---|---|---|
| 总降水 | rain | APCP | - | (0, 1, 8) | surface | - | 95 |
field = load_field_from_file(
geps_grib2_orig_file_path,
parameter="APCP",
lazy=True
)
assert field.attrs["GRIB_count"] == 95field = load_field_from_file(
geps_grib2_orig_file_path,
parameter="rain",
lazy=True
)
assert field.attrs["GRIB_count"] == 95field = load_field_from_file(
geps_grib2_orig_file_path,
parameter={"discipline": 0, "parameterCategory": 1, "parameterNumber": 8},
lazy=True
)
assert field.attrs["GRIB_count"] == 95降雪¶
| 要素名 | cemc | wgrib2 | eccodes | GRIB Key | 层次类型 | 层次 | 编号 |
|---|---|---|---|---|---|---|---|
| 降雪 | sf | ASNOW | - | (0, 1, 29) | surface | - | 96 |
field = load_field_from_file(
geps_grib2_orig_file_path,
parameter="ASNOW",
lazy=True
)
assert field.attrs["GRIB_count"] == 96field = load_field_from_file(
geps_grib2_orig_file_path,
parameter="sf",
lazy=True
)
assert field.attrs["GRIB_count"] == 96field = load_field_from_file(
geps_grib2_orig_file_path,
parameter={"discipline": 0, "parameterCategory": 1, "parameterNumber": 29},
lazy=True
)
assert field.attrs["GRIB_count"] == 96云量¶
总云量¶
| 要素名 | cemc | wgrib2 | eccodes | GRIB Key | 层次类型 | 层次 | 编号 |
|---|---|---|---|---|---|---|---|
| 总云量 | tcc | TCDC | tcc | (0, 6, 1) | entireAtmosphere | - | 97 |
field = load_field_from_file(
geps_grib2_orig_file_path,
parameter="TCDC",
lazy=True
)
assert field.attrs["GRIB_count"] == 97field = load_field_from_file(
geps_grib2_orig_file_path,
parameter="tcc",
lazy=True
)
assert field.attrs["GRIB_count"] == 97field = load_field_from_file(
geps_grib2_orig_file_path,
parameter={"discipline": 0, "parameterCategory": 6, "parameterNumber": 1},
lazy=True
)
assert field.attrs["GRIB_count"] == 97低云量¶
| 要素名 | cemc | wgrib2 | eccodes | GRIB Key | 层次类型 | 层次 | 编号 |
|---|---|---|---|---|---|---|---|
| 低云量 | lcc | LCDC | lcc | (0, 6, 3) | entireAtmosphere | - | 98 |
field = load_field_from_file(
geps_grib2_orig_file_path,
parameter="LCDC",
lazy=True
)
assert field.attrs["GRIB_count"] == 98field = load_field_from_file(
geps_grib2_orig_file_path,
parameter="lcc",
lazy=True
)
assert field.attrs["GRIB_count"] == 98field = load_field_from_file(
geps_grib2_orig_file_path,
parameter={"discipline": 0, "parameterCategory": 6, "parameterNumber": 3},
lazy=True
)
assert field.attrs["GRIB_count"] == 98中云量¶
| 要素名 | cemc | wgrib2 | eccodes | GRIB Key | 层次类型 | 层次 | 编号 |
|---|---|---|---|---|---|---|---|
| 中云量 | mcc | MCDC | mcc | (0, 6, 4) | entireAtmosphere | - | 99 |
field = load_field_from_file(
geps_grib2_orig_file_path,
parameter="MCDC",
lazy=True
)
assert field.attrs["GRIB_count"] == 99field = load_field_from_file(
geps_grib2_orig_file_path,
parameter="mcc",
lazy=True
)
assert field.attrs["GRIB_count"] == 99field = load_field_from_file(
geps_grib2_orig_file_path,
parameter={"discipline": 0, "parameterCategory": 6, "parameterNumber": 4},
lazy=True
)
assert field.attrs["GRIB_count"] == 99高云量¶
| 要素名 | cemc | wgrib2 | eccodes | GRIB Key | 层次类型 | 层次 | 编号 |
|---|---|---|---|---|---|---|---|
| 高云量 | hcc | HCDC | hcc | (0, 6, 5) | entireAtmosphere | - | 100 |
field = load_field_from_file(
geps_grib2_orig_file_path,
parameter="HCDC",
lazy=True
)
assert field.attrs["GRIB_count"] == 100field = load_field_from_file(
geps_grib2_orig_file_path,
parameter="hcc",
lazy=True
)
assert field.attrs["GRIB_count"] == 100field = load_field_from_file(
geps_grib2_orig_file_path,
parameter={"discipline": 0, "parameterCategory": 6, "parameterNumber": 5},
lazy=True
)
assert field.attrs["GRIB_count"] == 100稳定度指数¶
K指数¶
| 要素名 | cemc | wgrib2 | eccodes | GRIB Key | 层次类型 | 层次 | 编号 |
|---|---|---|---|---|---|---|---|
| K指数 | kidx | KX | kx | (0, 7, 2) | meanSea | - | 101 |
field = load_field_from_file(
geps_grib2_orig_file_path,
parameter="KX",
lazy=True
)
assert field.attrs["GRIB_count"] == 101field = load_field_from_file(
geps_grib2_orig_file_path,
parameter="kx",
lazy=True
)
assert field.attrs["GRIB_count"] == 101field = load_field_from_file(
geps_grib2_orig_file_path,
parameter="kidx",
lazy=True
)
assert field.attrs["GRIB_count"] == 101field = load_field_from_file(
geps_grib2_orig_file_path,
parameter={"discipline": 0, "parameterCategory": 7, "parameterNumber": 2},
lazy=True
)
assert field.attrs["GRIB_count"] == 101对流有效位能¶
| 要素名 | cemc | wgrib2 | eccodes | GRIB Key | 层次类型 | 层次 | 编号 |
|---|---|---|---|---|---|---|---|
| 对流有效位能 | cape | CAPE | - | (0, 7, 6) | surface | - | 102 |
field = load_field_from_file(
geps_grib2_orig_file_path,
parameter="CAPE",
lazy=True
)
assert field.attrs["GRIB_count"] == 102field = load_field_from_file(
geps_grib2_orig_file_path,
parameter="cape",
lazy=True
)
assert field.attrs["GRIB_count"] == 102field = load_field_from_file(
geps_grib2_orig_file_path,
parameter={"discipline": 0, "parameterCategory": 7, "parameterNumber": 6},
lazy=True
)
assert field.attrs["GRIB_count"] == 102对流抑制能量¶
| 要素名 | cemc | wgrib2 | eccodes | GRIB Key | 层次类型 | 层次 | 编号 |
|---|---|---|---|---|---|---|---|
| 对流抑制能量 | cin | CIN | - | (0, 7, 7) | surface | - | 103 |
field = load_field_from_file(
geps_grib2_orig_file_path,
parameter="CIN",
lazy=True
)
assert field.attrs["GRIB_count"] == 103field = load_field_from_file(
geps_grib2_orig_file_path,
parameter="cin",
lazy=True
)
assert field.attrs["GRIB_count"] == 103field = load_field_from_file(
geps_grib2_orig_file_path,
parameter={"discipline": 0, "parameterCategory": 7, "parameterNumber": 7},
lazy=True
)
assert field.attrs["GRIB_count"] == 103下沉对流有效位能¶
| 要素名 | cemc | wgrib2 | eccodes | GRIB Key | 层次类型 | 层次 | 编号 |
|---|---|---|---|---|---|---|---|
| 下沉对流有效位能 | dcape | DCAPE | - | (0, 7, 224) | surface | - | 104 |
field = load_field_from_file(
geps_grib2_orig_file_path,
parameter="DCAPE",
lazy=True
)
assert field.attrs["GRIB_count"] == 104field = load_field_from_file(
geps_grib2_orig_file_path,
parameter="dcape",
lazy=True
)
assert field.attrs["GRIB_count"] == 104field = load_field_from_file(
geps_grib2_orig_file_path,
parameter={"discipline": 0, "parameterCategory": 7, "parameterNumber": 224},
lazy=True
)
assert field.attrs["GRIB_count"] == 1040-1000米垂直风切变¶
| 要素名 | cemc | wgrib2 | eccodes | GRIB Key | 层次类型 | 层次 | 编号 |
|---|---|---|---|---|---|---|---|
| 0-1000米垂直风切变 | shr(0-1000) | VWSH | vwsh | (0, 2, 25) | heightAboveGroundLayer | 1000, 0 | 105 |
field = load_field_from_file(
geps_grib2_orig_file_path,
parameter="VWSH",
lazy=True
)
assert field.attrs["GRIB_count"] == 105field = load_field_from_file(
geps_grib2_orig_file_path,
parameter="vwsh",
lazy=True
)
assert field.attrs["GRIB_count"] == 105field = load_field_from_file(
geps_grib2_orig_file_path,
parameter="shr(0-1000)",
lazy=True
)
assert field.attrs["GRIB_count"] == 105field = load_field_from_file(
geps_grib2_orig_file_path,
parameter={"discipline": 0, "parameterCategory": 2, "parameterNumber": 25},
lazy=True
)
assert field.attrs["GRIB_count"] == 1050-3000米垂直风切变¶
| 要素名 | cemc | wgrib2 | eccodes | GRIB Key | 层次类型 | 层次 | 编号 |
|---|---|---|---|---|---|---|---|
| 0-3000米垂直风切变 | shr(0-3000) | VWSH | vwsh | (0, 2, 25) | heightAboveGroundLayer | 3000, 0 | 106 |
field = load_field_from_file(
geps_grib2_orig_file_path,
parameter="VWSH",
level_type="heightAboveGroundLayer",
level=3000,
lazy=True
)
assert field.attrs["GRIB_count"] == 106field = load_field_from_file(
geps_grib2_orig_file_path,
parameter="vwsh",
level_type="heightAboveGroundLayer",
level=3000,
lazy=True
)
assert field.attrs["GRIB_count"] == 106field = load_field_from_file(
geps_grib2_orig_file_path,
parameter="shr(0-3000)",
lazy=True
)
assert field.attrs["GRIB_count"] == 106field = load_field_from_file(
geps_grib2_orig_file_path,
parameter={"discipline": 0, "parameterCategory": 2, "parameterNumber": 25},
level_type="heightAboveGroundLayer",
level=3000,
lazy=True
)
assert field.attrs["GRIB_count"] == 1060-6000米垂直风切变¶
| 要素名 | cemc | wgrib2 | eccodes | GRIB Key | 层次类型 | 层次 | 编号 |
|---|---|---|---|---|---|---|---|
| 0-6000米垂直风切变 | shr(0-6000) | VWSH | vwsh | (0, 2, 25) | heightAboveGroundLayer | 6000, 0 | 107 |
field = load_field_from_file(
geps_grib2_orig_file_path,
parameter="VWSH",
level_type="heightAboveGroundLayer",
level=6000,
lazy=True
)
assert field.attrs["GRIB_count"] == 107field = load_field_from_file(
geps_grib2_orig_file_path,
parameter="vwsh",
level_type="heightAboveGroundLayer",
level=6000,
lazy=True
)
assert field.attrs["GRIB_count"] == 107field = load_field_from_file(
geps_grib2_orig_file_path,
parameter="shr(0-6000)",
lazy=True
)
assert field.attrs["GRIB_count"] == 107field = load_field_from_file(
geps_grib2_orig_file_path,
parameter={"discipline": 0, "parameterCategory": 2, "parameterNumber": 25},
level_type="heightAboveGroundLayer",
level=6000,
lazy=True
)
assert field.attrs["GRIB_count"] == 107最优抬升指数¶
| 要素名 | cemc | wgrib2 | eccodes | GRIB Key | 层次类型 | 层次 | 编号 |
|---|---|---|---|---|---|---|---|
| 最优抬升指数 | bli | BLI | bli | (0, 7, 1) | surface | - | 108 |
field = load_field_from_file(
geps_grib2_orig_file_path,
parameter="BLI",
lazy=True
)
assert field.attrs["GRIB_count"] == 108field = load_field_from_file(
geps_grib2_orig_file_path,
parameter="bli",
lazy=True
)
assert field.attrs["GRIB_count"] == 108field = load_field_from_file(
geps_grib2_orig_file_path,
parameter={"discipline": 0, "parameterCategory": 7, "parameterNumber": 1},
lazy=True
)
assert field.attrs["GRIB_count"] == 108雷达反射率、冰雹指数与可降水量¶
组合雷达反射率¶
| 要素名 | cemc | wgrib2 | eccodes | GRIB Key | 层次类型 | 层次 | 编号 |
|---|---|---|---|---|---|---|---|
| 组合雷达反射率 | cdbz | CR | - | (0, 16, 224) | surface | - | 109 |
field = load_field_from_file(
geps_grib2_orig_file_path,
parameter="CR",
lazy=True
)
assert field.attrs["GRIB_count"] == 109field = load_field_from_file(
geps_grib2_orig_file_path,
parameter="cdbz",
lazy=True
)
assert field.attrs["GRIB_count"] == 109field = load_field_from_file(
geps_grib2_orig_file_path,
parameter={"discipline": 0, "parameterCategory": 16, "parameterNumber": 224},
lazy=True
)
assert field.attrs["GRIB_count"] == 109冰雹指数¶
| 要素名 | cemc | wgrib2 | eccodes | GRIB Key | 层次类型 | 层次 | 编号 |
|---|---|---|---|---|---|---|---|
| 冰雹指数 | hi | HI | - | (0, 1, 239) | surface | - | 110 |
field = load_field_from_file(
geps_grib2_orig_file_path,
parameter="HI",
lazy=True
)
assert field.attrs["GRIB_count"] == 110field = load_field_from_file(
geps_grib2_orig_file_path,
parameter="hi",
lazy=True
)
assert field.attrs["GRIB_count"] == 110field = load_field_from_file(
geps_grib2_orig_file_path,
parameter={"discipline": 0, "parameterCategory": 1, "parameterNumber": 239},
lazy=True
)
assert field.attrs["GRIB_count"] == 110整层可降水量¶
| 要素名 | cemc | wgrib2 | eccodes | GRIB Key | 层次类型 | 层次 | 编号 |
|---|---|---|---|---|---|---|---|
| 整层可降水量 | pwat | PWAT | pwat | (0, 1, 3) | atmosphere | - | 111 |
field = load_field_from_file(
geps_grib2_orig_file_path,
parameter="PWAT",
lazy=True
)
assert field.attrs["GRIB_count"] == 111field = load_field_from_file(
geps_grib2_orig_file_path,
parameter="pwat",
lazy=True
)
assert field.attrs["GRIB_count"] == 111field = load_field_from_file(
geps_grib2_orig_file_path,
parameter={"discipline": 0, "parameterCategory": 1, "parameterNumber": 3},
lazy=True
)
assert field.attrs["GRIB_count"] == 111