I've been having some issues with the accurate display (via ncWMS/godiva) of
some geostationary satellite data (netCDF4 with metadata that ~complies with CF
1.6). I've tracked this down to the units of "perspective_point_height" aka
"height_above_earth". CF uses m while the netcdf-java docs
suggest the input is in km. Which of these should I follow?
When I specify a "height_above_earth" of 35785831 m, the WMS display does not
line up with coastlines (it seems shrunk). However, if I change this to
35785.831, the coastlines are just about right. I think the remaining, minor,
differences are due to a) inaccuracies of the satellite navigation and/or b)
the use of semi_minor_axis and semi_major_axis in my projection spec (ie I
don't supply "earth_radius" - so maybe the default Earth radius in km is being
My proj4 string is '+proj=geos +lon_0=145.0 +h=35785831 +a=6378169.0
+b=6356583.8', while the attributes of the 'vertical_perspective' grid_mapping
vertical_perspective:grid_mapping_name = "vertical_perspective"
vertical_perspective:inverse_flattening = 295.488065897 ;
vertical_perspective:latitude_of_projection_origin = 0. ;
vertical_perspective:longitude_of_projection_origin = 145. ;
vertical_perspective:perspective_point_height = 35785831 ;
vertical_perspective:height_above_earth = 35785831 ;
vertical_perspective:semi_major_axis = 6356583.8 ;
vertical_perspective:semi_minor_axis = 6378169. ;
vertical_perspective:units = "m" ;
Note that I've already added a WKT string (under
vertical_perspective:spatial_ref) for GDAL to be able to access the data
correctly (not shown).
So, I can change my metadata to match the ncWMS code (and add a comment to that
effect), but this would break my CF ~compliance (eg units of m). Alternatively,
I could make local changes to our source (maintenance issues) or suggest
changes to the code base (potentially catastrophic for users who have changed
to km). I'd appreciate any suggestions.