GFS Grib Wind Values 解码和转换 (U & V)



我在PHP中做一个Grib2解码器,并从我找到的一半编写的库开始。一切都很好,除了我从数据中得到的值在将整型值转换为实际值后是不正确的。我认为我转换的一切都是正确的,即使我用云数据进行测试,当我在Panoply中检查它时,它看起来也是正确的。我认为这是一个在网上流传的公式。以下是来自https://nomads.ncep.noaa.gov的10米高空GFS

Y*10^D = R+(X1+X2)*2^E

我不确定我是否正确地插入了值,但它再次与云覆盖百分比一起工作。

所以…"数据表示值"我从Grib Section 5

'Reference value (R)' => 886.25067138671875,
'Binary Scale Factor (E)' => 0,
'Decimal Scale Factor (D)' => 2,
'Number of bits used for each packed value' => 11,
'exp' => pow(2, $E), //(Equals 1) (The Library used these as the 2^E)
'base' => pow(10, $D), //(Equals 100) (And the 10^D)
'template' => 0,

如下所示,这些数字肯定与参考值有关联。最接近886(R)的数是892,其实际值应为0.05,如下图(EX)所示。大于892的数为正,小于892的数为负。但当我使用公式(886 + 892 * 1)/100时,得到的是17.78,而不是0.05。我似乎错过了一些非常明显的东西,我是否误解了公式/方程,其中Y是我想要的值…

X1 = 0 (documentation says)
X2 = 892 (documentation says is scaled value, the value in the Grib from bits?) 
2^0 = 1
10^2 = 100
R = 886.25067138671875
Y * 10^D = R + (X1 + X2) * 2^E
Y * 100 = R + (X1 + X2) * 1
886  + (0 + 892) * 1 ) / 100  
(886 + 892 * 1) / 100
= 17.78

来自Grib的风的Int值(从Bits转换后)

0 => 695,
1 => 639,
2 => 631,
3 => 0,
4 => 436,
5 => 513,
6 => 690,
7 => 570,
8 => 625,
9 => 805,
10 => 892,<-----------(EX.)
11 => 1044,
12 => 952,
13 => 1081,
14 => 1414,
15 => 997,
16 => 1106,
17 => 974,
18 => 1135,
19 => 1069,
20 => 912,

Panoply(著名的Grib应用程序)显示的实际解码风值

-1.9125067
-2.4725068
-2.5525067
-8.862507
-4.5025067
-3.7325068
-1.9625068
-3.1625068
-2.6125066
-0.81250674
0.057493284 <-----------(EX.)
1.5774933
0.6574933
1.9474933
5.2774935
1.1074933
2.1974933
0.87749326
2.4874933
1.8274933
0.2574933

y = 0.01 * (x - 886.25067138671875)似乎适用于所有点

so0.01 * (892 - 886.25067138671875) = 0.0574

最新更新