TLDR:
警告
下述的数据已经不是 xue 最新的情况了,目前格点数据全部用 Zarr 格式存储 + STAC 进行管理,最新的技术栈见 Xue:云原生实时气象数据技术栈。
事情起因,是过去数年中,我一直想实现足够流畅、相对节省性能的模式预报变量的可视化动画。
目前气象圈子里展示模式预报的动画,大体有如下的路线:
- 直接处理成上色彩图,甚至地图底图也叠加处理好,直接轮播或者加工成 MP4 格式,一般各国气象部门都会提供这种方式的动画;
- 处理成 XYZ 瓦片,网页端按照时间序列访问加载叠加出动画效果,但是长时间的模式预报涉及海量的瓦片访问,并且已有的产品的动画效果并不是很丝滑;
- 直接处理成二进制格式(近年来一般再加上「云原生」的描述),网页端按照文件头的索引按需加载,例如:
- Zarr
- Cloud Optimized GeoTIFF (COG)
- Open Mete 使用的 om format
气象数据的动画可视化,实际上类似视频,所以可以参考流媒体已经大规模采用的思路,并尽量复用流媒体时代积累的基础设施,让一个特殊行业的可视化需求,尽量退化成流媒体的分发和渲染问题。所以开发了一个名为「雪」的项目,目前实际上并行跑着两套数据:
- 自定义的
.xue的文件,可以实现按需加载并且有前后帧的压缩机制; .h264的视频文件,在受支持的浏览器端使用 WebCodecs 进行解码渲染,文件体积会更小。
目前项目通过 Python 作为胶水调用 GDAL,eccodes,ffmpeg 等工具处理 GFS 和 IFS 的 GRIB 数据,制作成二进制文件。然后发布到 R2 中。网页端用 Rust 编写的 WebAssembly 进行解码渲染。