看懂输出与数据格式
一个预测值需要哪些坐标
数组中的 values[0, 4, 100, 200] 本身没有气象含义。只有维度顺序和坐标齐全,才知道它代表哪次起报、哪个时效和哪个地理位置。Earth2Studio 用张量与命名坐标一起传递状态;输出后仍要保存这些含义。
确定性预报常见逻辑维度是 [initialization, lead_time, latitude, longitude],每个变量单独存储;集合预报增加 member。某些模型另有历史输入轴、非规则网格或不同坐标形式,必须读实际输出。IO 说明
三层数据,而不是一份文件包办所有用途
| 层 | 推荐用途 | 格式方向 |
|---|---|---|
| 推理与科学留存 | 回报评估、诊断、重处理 | Zarr;需要单文件互换时用 NetCDF |
| 标准科学描述 | 变量、网格、层次、时间、来源 | 采用 CF 思想的明确元数据 |
| 浏览器分发 | 快速显示选中的变量与目标 | JSON manifest + 按目标分开的数值二进制 |
Zarr 擅长多维分块访问;NetCDF 便于气象工具互换。浏览器不必为了显示一帧而下载整个全球、多变量、多个集合成员的运行结果。图像瓦片可以作为显示派生物,但不能取代 tooltip 所需的原始科学值。
CF 约定 为坐标、单位、日历、时间边界和统计方法提供了成熟表达。普通 JSON 采用其中的思想,不等于它已经成为完整的 CF 合规文件。
时间是最容易悄悄出错的地方
瞬时值:明确 valid_time 和 lead_time。例如 00:00 起报的 +6 小时 t2m 是 06:00 的状态,不是 00:00~06:00 的平均温度。
区间量:明确 valid_start、valid_end、边界规则及 mean/sum/max/...。例如 [00:00, 06:00) 的区间平均,与终点 06:00 的瞬时场并不相同。
累计量:明确是“本时段累计”还是“从起报累计”。把累计场转成每段量时要先核实重置规则,不能只做相邻帧相减。
非公历资料:保存原始 calendar 和数值时间单位。365_day、360_day 不能直接塞进 JavaScript Date 后声称是 UTC 公历;若要与公历产品叠加,必须有经过确认的映射规则。
数值规范
一个可用于浏览器的标量资产可以采用 little-endian Float32,行优先,缺测为规范化 NaN。元数据需要至少包含:dtype、字节序、shape、dimension order、单位、网格、解码字节数、压缩方式、摘要和缺测数量。
decoded_bytes = 各维度长度乘积 × 每元素字节数
SHA-256 应明确针对压缩前的规范化字节还是压缩后的对象;若沿用压缩前摘要,最好另外保留存储对象摘要以验证上传。JSON 不能写裸 NaN;元数据写字符串规则,NaN 只存在于二进制数组。
科学值与低精度显示副本应分开标记。Float64 转 Float32、重新网格化、平滑和分位数计算都要记录转换方法与误差含义。
温度、气压与位势
| 变量 | 常见科学单位 | 显示转换 | 需要特别注意 |
|---|---|---|---|
| t2m / pressure-level temperature | K | °C = K − 273.15 | 温差 K 与温差 °C 数值相同,但绝对温度要减偏移 |
| msl | Pa | hPa = Pa / 100 | 海平面气压与地面气压不同 |
| u / v | m s⁻¹ | 风速为 √(u²+v²) | 明确 east/north 分量;气象风向是来向 |
| geopotential | m² s⁻² | 位势高度 = 位势 / 9.80665 | 不能把 z 名称直接解释为米 |
| geopotential height | m | 可按业务以 m 或 dam 展示 | 不可再次除以重力常数 |
这些转换必须发生在明确知道变量语义后。Earth2Studio 的源适配器可能已做一次转换;保留其使用的常数和转换记录,避免重复处理。
网格和地图不是同一个东西
经纬度网格是数据空间;Web Mercator、地球三维视图等是显示空间。拥有经纬度输入不代表某个地图引擎已经支持任意投影。
全球经度可以规范到 [-180,180),但必须同步重排数组列。纬度变成北到南时也要同步重排行。不能只改坐标而不改数值。经度周期边界、极点是否包含、格点中心与单元边界要明确;720 和 721 行不能靠“补一行”随意互换。
曲线网格需要同形二维经纬度坐标;不能用四个边界值替代真实网格。风场从投影网格转到地理坐标时,还可能需要旋转分量,而不仅是重采样。
一次预报会有多大
以 721 × 1440、Float32 为假设,单变量单目标约 3.96 MiB。72 变量、含初始帧的 41 个目标约 11.42 GiB/成员;16 个成员约 182.68 GiB,尚未计算压缩、坐标、其他元数据和中间工作空间。
这只是按维度算出的未压缩量,不是模型显存,也不是实测下载大小。假设每 6 小时一次,41 帧对应初始时刻加未来 10 天。公开展示只需要少量变量时,应减少分发内容;科学留存范围另行决定,不能默认永久保存所有成员。
练习
假设一个资产有 721×1440 个 Float32 样本。若解压后字节数不是 4,152,960,应拒绝解码或重新检查元数据。若字节数相同,也不能据此证明数据正确:还要检查摘要、坐标、单位与时间。