Grib2Gds.AbstractRotatedLatLon, Grib2Gds.AlbersEqualArea, Grib2Gds.CurvilinearOrthogonal, Grib2Gds.GaussLatLon, Grib2Gds.LambertConformal, Grib2Gds.LatLon, Grib2Gds.Mercator, Grib2Gds.PolarStereographic, Grib2Gds.RotatedLatLon, Grib2Gds.RotatedLatLon32769, Grib2Gds.SpaceViewPerspective
Modifier and Type | Field and Description |
---|---|
float |
dX |
float |
dY |
int |
flags |
float |
LaP |
float |
LoP |
float |
Nr |
float |
Xo |
float |
Xp |
float |
Yo |
float |
Yp |
center, data, earthRadius, earthShape, hashCode, lastOctet, majorAxis, maxReletiveErrorPos, minorAxis, nptsInLine, scanMode, template
Modifier and Type | Method and Description |
---|---|
boolean |
equals(java.lang.Object o) |
int |
hashCode() |
GdsHorizCoordSys |
makeHorizCoordSys()
Make a Eumetsat MSG "Normalized Geostationary Projection" projection.
|
void |
testHorizCoordSys(java.util.Formatter f) |
factory, finish, getEarth, getNameShort, getNptsInLine, getNx, getNxRaw, getNy, getNyRaw, getOctet, getOctet4, getOctetSigned, getRawBytes, getScaledValue, getScanMode, isLatLon, isThin, readNptsInLine, setCenter, testScanMode
public float LaP
public float LoP
public float dX
public float dY
public float Xp
public float Yp
public float Nr
public float Xo
public float Yo
public int flags
public GdsHorizCoordSys makeHorizCoordSys()
=======
from simon.elliott@eumetsat.int
For products on a single pixel resolution grid, the scan angle is 83.84333 E-6 rad. So dx = 2 * arcsin(10e6/Nr) / 83.84333 E-6 = 3622.30, which encoded to the nearest integer is 3622. This is correctly encoded in our products.
For products on a 3x3 pixel resolution grid, the scan angle is 3 * 83.84333 E-6 rad = 251.52999 E-6 rad. So dx = 2 * arcsin(10e6/Nr) / 251.52999 E-6 = 1207.43, which encoded to the nearest integer is 1207. This is correctly encoded in our products.
Due to the elliptical shape of the earth, the calculation is a bit different in the y direction (Nr is in multiples of the equatorial radius, but the tangent point is much closer to the polar radius from the earth's centre. Approximating that the tangent point is actually at the polar radius from the earth's centre: The sine of the angle subtended by the Earths centre and the tangent point on the equator as seen from the spacecraft = Rp / (( Nr * Re) / 10^6) = (Rp * 10^6) / (Re * Nr)
The angle subtended by the Earth equator as seen by the spacecraft is, by symmetry twice the inverse sine above, = 2 * arcsine ((Rp * 10^6) / (Re * Nr))
For products on a single pixel resolution grid, the scan angle is 83.84333 E-6 rad. So dy = 2 * arcsine ((Rp * 10^6) / (Re * Nr)) / 83.84333 E-6 = 3610.06, which encoded to the nearest integer is 3610. This is currently encoded in our products as 3568.
For products on a 3x3 pixel resolution grid, the scan angle is 3 * 83.84333 E-6 rad = 251.52999 E-6 rad. So dy = 2 * arcsine ((Rp * 10^6) / (Re * Nr)) / 251.52999 E-6 = 1203.35, which encoded to the nearest integer is 1203. This is currently encoded in our products as 1189.
As you can see the dx and dy values we are using will lead to an error of around 1% in the y direction. I will ensure that the values are corrected to those explained here (3610 and 1203) as soon as possible.
makeHorizCoordSys
in class Grib2Gds
public void testHorizCoordSys(java.util.Formatter f)
testHorizCoordSys
in class Grib2Gds