Class Grib2Gds.SpaceViewPerspective
- java.lang.Object
-
- ucar.nc2.grib.grib2.Grib2Gds
-
- ucar.nc2.grib.grib2.Grib2Gds.SpaceViewPerspective
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class ucar.nc2.grib.grib2.Grib2Gds
Grib2Gds.AbstractRotatedLatLon, Grib2Gds.AlbersEqualArea, Grib2Gds.CurvilinearOrthogonal, Grib2Gds.GaussLatLon, Grib2Gds.LambertConformal, Grib2Gds.LatLon, Grib2Gds.Mercator, Grib2Gds.PolarStereographic, Grib2Gds.RotatedLatLon, Grib2Gds.RotatedLatLon32769, Grib2Gds.SpaceViewPerspective
-
-
Field Summary
Fields Modifier and Type Field Description int
flags
-
Fields inherited from class ucar.nc2.grib.grib2.Grib2Gds
center, data, earthRadius, earthShape, hashCode, lastOctet, majorAxis, minorAxis, nptsInLine, scanMode, template
-
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description boolean
equals(Object o)
int
hashCode()
GdsHorizCoordSys
makeHorizCoordSys()
Make a Eumetsat MSG "Normalized Geostationary Projection" projection.void
testHorizCoordSys(Formatter f)
-
Methods inherited from class ucar.nc2.grib.grib2.Grib2Gds
factory, finish, getEarth, getNameShort, getNptsInLine, getNx, getNxRaw, getNy, getNyRaw, getOctet, getRawBytes, getScanMode, isLatLon, isThin, setCenter, testScanMode
-
-
-
-
Method Detail
-
makeHorizCoordSys
public GdsHorizCoordSys makeHorizCoordSys()
Make a Eumetsat MSG "Normalized Geostationary Projection" projection. Fake coordinates for now, then see if this can be generalized.=======
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.
- Specified by:
makeHorizCoordSys
in classGrib2Gds
-
testHorizCoordSys
public void testHorizCoordSys(Formatter f)
- Specified by:
testHorizCoordSys
in classGrib2Gds
-
-