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

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