解析中国气象数据网•综合实况的 BIN 瓦片文件
在 中国气象数据网•综合实况 的网页中,降水数据是以如下格式的瓦片路径加载的:
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
库将结果绘制出来:
结果看着还行,但是细节有问题,可能是坐标顺序处理不当。
Read other posts