title: 位图
weight: 3
Bitmap
位图是二进制值的数组,用于表示每个网格点存在或缺失数据。0 值表示着数据缺失(missing),1 值表示数据存在。
为了节省存储,位图用于有效地表示数据段中真实存在的值。

bitmap 尺寸等于网格点的个数(numberOfPoints)。其中:
0-> 数据值缺失1-> 数据值存在
当编码时,可以使用 misssingValue 告诉库那些数据是缺失的。
默认的缺失值是 9999,但可以被用户修改。例如,使用一个超过正常范围的数值。
库在数据值数组中遇到与缺失值相等的值时,会将该网格点对应的 bitmap 点设为 0.
在解码时,可以直接查询 bitmap 发现缺失的数据。
练习
构造包含 4 个消息的 start.grib2 文件。
构造 4 个 filter 规则
# step0.filterprint "message 1";set bitsPerValue=8;set bitmapPresent=0;set values={0.2, 0.4, 0.6, 0.7, 9999};write;# step1.filterprint "message 2";set bitsPerValue=16;set bitmapPresent=0;set values={0.2, 0.4, 0.6, 0.7, 9999};append;# step2.filterprint "message 3";set bitsPerValue=24;set bitmapPresent=0;set values={0.2, 0.4, 0.6, 0.7, 9999};append;# step3.filterprint "message 4";set bitsPerValue=8;set bitmapPresent=1;set values={0.2, 0.4, 0.6, 0.7, 9999};append;
使用
grib_filter创建文件:$ grib_filter -o start.grib2 step0.filter c.grib2$ grib_filter -o start.grib2 step1.filter c.grib2$ grib_filter -o start.grib2 step2.filter c.grib2$ grib_filter -o start.grib2 step3.filter c.grib2
打印数值
$ cat print.filterprint "[values]";print "[maximum]";$ grib_filter print.filter start.grib20.2 0.4 0.6 0.7 999999990.2 0.4 0.6 0.7 999999990.2 0.4 0.6 0.7 999999990.2 0.4 0.6 0.7 99990.7
可以看到,设置 bitmap 后,9999 被识别为缺失值。
