NOTICE: This version of the NSF Unidata web site (archive.unidata.ucar.edu) is no longer being updated.
Current content can be found at unidata.ucar.edu.
To learn about what's going on, see About the Archive Site.
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) ;