Hi Jim,
the UKMO fields are on two different grids. One is 1.25 x 0.8333... degrees
grid passing by the poles. The other one is a 1.25 x 0.8333... degrees grid
shifted by half a grid size in both directions, and thus not reaching the poles
nor the equator (this is for winds and a few other parameters).
For both grids, the north/south grid increment is 5/6 of a degree. This number
cannot be represented in the GRIB2 header in the standard way (in units of a
1/1000000th of a degree), without loss of precision (because 5/6=0.8333... with
an infinite number of 3s).
To support such grids, the GRIB2 standard came with a way of changing the unit
used to encode latitudes and longitudes. This is done by specifying a "Basic
angle of the initial production domain" and a "Subdivisions of basic angle" in
the GRIB header. If these two values are defined, the latitudes and longitudes
are coded in this unit.
For one of the two UKMO grids, the "basic angle" is 360, and the "subdivision"
is 864, thus the latitude and longitudes are expressed in units of 360/864
degrees. The "latitude of the first point" is then coded as -216, which,
translated in degrees gives -216*360/864 = -90. (Please also note that UKMO
fields are organised south to north, this is described in the "scanning mode")
Have a look at http://tigge.ecmwf.int/grid.html to see how all these values are
connected.
If you use ECMWF's grib_api, you can access the
"latitudeOfFirstGridPointInDegrees" instead of the "latitudeOfFirstGridPoint",
which will return the latitude in degrees whatever the unit coded in the
headers.
Cheers,
Baudouin
---------------------------------------------------
Baudouin Raoult.
Head, Data and Services Section
European Center for Medium Range Weather Forecast
Reading, UK