Jonathan Gregory wrote:
> Dear Rich
>
>
>>I also would vote for Bert's original suggestion of attaching the
>>grid_mapping directly to
>>the coordinates that use that mapping.
>
> Can you explain why that seems better to you than (my) alternative of naming
> 2D projection coordinates in the grid_mapping variable instead of making them
> auxiliary coordinate variables? The reasons why I prefer this at present are
> that the grid_mapping attribute stays where it is, that it serves as a single
> place to find the information that defines the mappings, and that there is no
> redundancy. Perhaps other people have other ideas.
I'd like to give a different slant on it.
>From my POV, the problem is that there a concept "coordinate system" floating around that doesnt currently have a representation in the netcdf file. If I understand Bert's case, he has (at least) 2 coordinate systems for his data variables. This actually comes up anytime you have both projection x,y and lat,lon coordinates, for example.
So going into abstraction, we want to have coordinate system "objects", and we want to be able to associate more than one of them with a data variable. A coordinate system consists of a list of coordinate variables (1D "coordinate variables" or "auxilary variables"), and "coordinate transforms" such as projections or vertical transforms. (Ive worked out this object model in more detail at
http://www.unidata.ucar.edu/software/netcdf-java/reference/CSObjectModel.html. The CDM maps CF-1.0 into this object model.)
Coming back to representation, one possibilty is to steal the same idea we used for "grid mapping variables", which is really just a container variable for projecction parameters. In the CDM, this is a "coordinate transform variable", ie a variable that defines a coordinate transform, in this case a projection. So we could also define a "coordinate system variable", which defines both its coordinates and the grid_mapping:
int Dutch_CoordSystem;
:coordinates = "dutch_x dutch_y";
:grid_mapping = EPSG19914;
int German_CoordSystem;
:coordinates = "german_x german_y";
:grid_mapping = EPSG16362;
and the data variables point to them, instead of using coordinates attribute:
float velocity_x(TIME,Layer,M,N);
velocity_x:long_name = "velocity, x-component" ;
velocity_x:units = "M/S" ;
velocity_x:standard_name = "x_sea_water_velocity" ;
velocity_x:coordinateSystems = "Dutch_CoordSystem Belgian_CoordSystem" ;
Received on Thu Nov 30 2006 - 17:29:00 GMT