GFS Grib 风值解码和转换 (U & V)
Posted
技术标签:
【中文标题】GFS Grib 风值解码和转换 (U & V)【英文标题】:GFS Grib Wind Values Decode And Convert (U & V) 【发布时间】:2021-11-25 18:46:37 【问题描述】:我正在用 php 做一个 Grib2 解码器,并从我找到的一个半写的库开始。一切正常,除了在将 Int 值转换为实际值后我从数据中获得的值不正确。我认为我正在正确转换所有内容,即使我使用云数据进行测试,当我在 Panoply 中检查它时它看起来也是正确的。我认为它的这个公式遍布互联网。下面我使用来自https://nomads.ncep.noaa.gov的地面以上 10 m GFS@
Y*10^D = R+(X1+X2)*2^E
我不确定我是否正确插入了这些值,但它同样适用于云量百分比。
所以....我从 Grib 第 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
【问题讨论】:
【参考方案1】:y = 0.01 * (x - 886.25067138671875)
似乎适用于所有点
所以0.01 * (892 - 886.25067138671875) = 0.0574
【讨论】:
@the-way 现在对你有用吗?以上是关于GFS Grib 风值解码和转换 (U & V)的主要内容,如果未能解决你的问题,请参考以下文章