中国气象数据网•综合实况 的网页中,降水数据是以如下格式的瓦片路径加载的:

https://image.data.cma.cn/tiles/China/RADAR_L3_MST_CREF_GISJPG_Tiles_CR/20250126/13/06/3/2/6.bin

我对这个 BIN 文件非常好奇,于是在 Cursor 的帮助下尝试解析这个文件。

一般而言,常规的非图片格式的瓦片更多是 Mapbox 的矢量瓦片,而中国气象数据网的这个 BIN 瓦片文件不管是文件名 GISJPG_Tiles 还是实际的内容(降水)都不是矢量瓦片的常见使用场景。所以猜测这个 BIN 文件是自定义的。

首先检查文件的内容:

hexdump -C -n 64 RADAR_L3_MST_CREF_GISJPG_Tiles_CR_20250126_13_06_3_2_6.bin | cat

输出:

00000000  7f ff 7f ff 7f ff 7f ff  7f ff 7f ff 7f ff 7f ff  |................|
*
00000040

看起来像是 16 位的整数。

其次是文件的体积:

ls -l RADAR_L3_MST_CREF_GISJPG_Tiles_CR_20250126_13_06_3_2_6.bin

得到的结果是 131071,这个数字是 256 * 256 * 2 - 1 的结果,可以合理推测瓦片实际数据的尺寸是 256,并且每个像素点占用 2 个字节。

所以可以直接编写一个 Python 脚本来解析这个文件。

image = np.zeros((256, 256), dtype=np.uint16)

# 读取二进制数据
with open(file_path, "rb") as f:
    # 每次读取 2 字节
    for y in range(256):
        for x in range(256):
            try:
                data = f.read(2)
                if len(data) == 2:
                    # 将两个字节转换为 16 位整数
                    value = int.from_bytes(data, byteorder="big", signed=False)
                    image[y, x] = value
            except:
                pass

随后利用 matplotlib 库将结果绘制出来:

降水数据

结果看着还行,但是细节有问题,可能是坐标顺序处理不当。