Hi John:
> A simple example, first where the coordinate info is attached to a
> specific data variable:
>
> dimensions:
> lon = 6 ;
> lat = 5 ;
> height = 30;
>
> variables:
> float TEMP(height, lat, lon) ;
> TEMP:lon="lon_coords" ;
> TEMP:lat="lat_coords" ;
> float lon_coords(lat,lon) ;
> float lat_coords(lat,lon) ;
>
> Suppose we want to plot/analyze/examine/etc. variable "TEMP". We
> immediately see it is a 6x5x3 array of values. Then, we want to find
> out more about the coordinates corresponding to the datapoints of
> "TEMP". There are no variables "lon" and "lat", so we simply take the
> coordinates to be "1,2,3,..." along each axis.
>
> So what else can we deduce? The rule for referential attributes is
> that when there is a variable attribute by the same name as one of the
> variable's dimensions, that attribute contains the name(s) of other
> variables from which to get spatio-temporal coordinates for that
> dimension. In this case, the longitudes can be obtained from variable
> "lon_coords". When we go to look at "lon_coords", we see that it is
> 2-D, so we match up which dimensions it has in common with TEMP. This
> tells us that the longitudes for TEMP(*,j,i) are in lon_coords(j,i).
> Likewise for latitudes.
I think we all agree on the meaning of this example, and we are trying
to decide on the best way to convey that meaning to an application, or a
person reading our netcdf files who hasnt followed our discussion.
A coordinate variable says "the variable lat is the coordinate function
for the index lat", but in this example you cant say that, nor can you
say "the variables lat_coords, lon_coords are the coordinate functions
for the index lat". What you can say is "the variables lat_coords,
lon_coords are the coordinate functions for the variable TEMP".
I want to claim that (lat, lon) are nothing but indices, and could just
as well be written
(npoints). If theres a coordinate variable lat(lat), then we have some
meaning. So the dimensions aren't fundamental to a coord system, the
coord functions are. So in general, you can't define the coordinate
system in reference to the dimensions (well, you can, but I claim its
not the best).
better is something like:
float TEMP(height, lat, lon) ;
TEMP:coordinates="lon_coords lat_coords" ;
float lon_coords(lat,lon) ;
float lat_coords(lat,lon) ;
although I've come to favor:
float TEMP(height,x,y) ;
TEMP:coordinates="lon_coords lat_coords" ;
float lon_coords(x,y) ;
float lat_coords(x,y) ;