Multiple Projections
On 24 Nov 2006 Bert Jagers requested the addition of a convention to support (a) 2D projection coordinates (whereas the existing standard expects projection coordinates to be the 1D coordinate variables) (b) more than one grid_mapping for a given data variable. Three conventions have been proposed. In all of them the projection coordinates have to have the appropriate standard_name.
John (modified by accident by Jonathan)
Introduce a new abstraction: a variable to describe a horizontal coordinate system.
int Dutch_CoordSystem; Dutch_CoordSystem:coordinates = "dutch_x dutch_y"; Dutch_CoordSystem:grid_mapping = "EPSG19914"; int German_CoordSystem; German_CoordSystem:coordinates = "german_x german_y"; German_CoordSystem:grid_mapping = "EPSG16362"; float velocity(time,layer,m,n); velocity:coordinateSystems = "Dutch_CoordSystem German_CoordSystem" ; velocity:coordinates="lat lon"; // can also list 1D coordinate variables float dutch_x(m,n); float dutch_y(m,n); float german_x(m,n); float german_y(m,n);
Jonathan No 1
Extended syntax for the grid_mapping attribute so that it can identify more than one projection and list 2D projection coordinates.
float velocity(time,layer,m,n); velocity:grid_mapping="dutch_x: dutch_y: EPSG19914 german_x: german_y: EPSG16362"; velocity:coordinates="lat lon"; // 2D projection coordinates could be listed as well float dutch_x(m,n); float dutch_y(m,n); float german_x(m,n); float german_y(m,n);
Jonathan No 2
A coordinate_system attribute replaces the grid_mapping attribute of the data variable.
float velocity(time,layer,m,n); velocity:coordinate_system="EPSG19914: dutch_x dutch_y EPSG16362: german_x german_y"; velocity:coordinates="lat lon"; float dutch_x(m,n); float dutch_y(m,n); float german_x(m,n); float german_y(m,n);
Bert
Attach the grid_mapping attribute to the 2D projection coordinates, which are given as auxiliary coordinate variables.
float velocity(time,layer,m,n); velocity:coordinates="lat lon dutch_x dutch_y german_x german_y"; float dutch_x(m,n); dutch_x:grid_mapping="EPSG19914"; float dutch_y(m,n); dutch_y:grid_mapping="EPSG19914"; float german_x(m,n); german_x:grid_mapping="EPSG16362"; float german_y(m,n); german_y:grid_mapping="EPSG16362";