Hi Steve- > > Forget latitude and longitude! The issue goes way back to a basic need > > for rules by which to interpret metadata/coordinates. Change the strings > > in the original example: > > > > dimensions: > > i = 5; > > j = 6; > > > > variables: > > float A(i,j); > > A:coordinates = "abc, def"; > > float abc(i,j); > > float def(i,j); > > > > Now suppose I want to create a visualization of "A", say balls whose > > colors represent the value of "A". There are 30 data points in a 6x5 > > grid, so I get 30 balls in my picture. Each point needs an "X" and a > > "Y" coordinate. Do I get "X" from "abc" or from "def"? > > > > And, yes, it *does* matter which one I assign to the y-axis. If the > > values in "abc" run from 5 to 15 and the values in "def" run from 22 to > > 84, you can bet that which one I pick for X and which one I pick for Y > > will makes a big difference to the picture I'm going to end up with! > > One way it will be correct (ie, the way the originator of the file > > intended), and the other way I get the transpose... > > The above is an example of the third coordinate system which I > mentioned in my posting on the field data model: the WORLD coordinate > system. To recap the previous two coordinate systems: > > 1. The MANIFOLD cooordinate system is that coordinate system in > which the data is defined. In a netCDF context, the manifold > coordinate system are the indicies of the variables. > > 2. The BASE coordinate system is that coordinate system in which > we like to think of the data -- an example being the usual > geophysical (lat,lon,z) > > 3. There is an invertible transformation from manifold coordinates > to base coordinates. > > The world coordinate system is that coordinate system in which the > data is either manipulated or displayed by some system that is outside > the context of the data. A good example of this is the (x,y,z) > coordinate system of a 3-D data display system. The problem stated > above can, thus, be restated as the following: > > How do we identify the transformation from base coordinates to world > coordinates. Geesh - that makes it sound so "theoretical" and complicated! ... Now, go ahead laugh at my (tongue in cheek) visceral reaction above, but I said it for a reason. While it is good that there is some underlying principles for representing and converting information, potential users and app-developers are going to read this kind of stuff and give up. "All I want to do is be able to plot my data." What does it mean to say that "the data is either manipulated or displayed by some system that is outside the context of the data"? If I have lat-lon-height data, I may not care that it's projected onto a globe (or a Lambert conformal projection, or ...). But I do want the points to be laid out with some care given to their relative placement (a 100x100 point array with 2deg-lon x 1deg-lat ought to be twice as long as it is high). Aren't 99% of plots in journal articles done this way? Or, look at any of the plots in http://www.gfdl.gov/~jps/Explorer_sample_maps.html or several of those in http://www.gfdl.gov/~jps/GFDL_VG_Gallery.html Can't we just say that a variable has a "shape" given by the number and length of its dimensions, and its points can be located by "index" along its dimensions (ie, 1,2,3,...) or by "coordinate values" (eg, 1.25, 2.5,...)? Then, depending on the qualities of the coordinates, we can project the data onto/into whatever space is applicable. > Placed in this context, we see the following: > > 1. This problem is separate from the problem of identifying the > manifold and base coordinate systems and the transformation between > them. > > 2. This problem must be solved in order to actually view the data. > > As a first stab at solving this second problem, I propose something > like the following, in which the manifold and base coordinate sytems are > identified, as well as the type of space the base coordinate system is > (from which the display system should be able to figure out the > base-to-world transformation): > > dimensions: > x = 5; > y = 10; > z = 12 > > variables: > float p(x,y,z); > p:coordinates = "lat lon alt"; > float lat(x,y); > lat:coordinate_type = "latitude"; > float lon(x,y); > lon:coordinate_type = "longitude"; > float alt(x,y,z); > alt:coordinate_type = "altitude"; !Excellent example! Now, I'll ask this one more time...can my application infer that "lat lon alt" is an ordered list intended to point to variables containing coordinates for "(x,y,z(", respectively? If so, then it will take "x" to be "lat", "y" to be "lon" and "z" to be "alt". Note that (inadvertently,I think), you have associated "x" with "lat" - not the usual association! In any case, I *do* like your explicit recognition that some indication of the coordinate system needs to be specified, either by inference via keywords "latitude", etc., or through the use of the attribute "coordinate_system" in your later examples. John (jps@gfdl.gov) Geophysical Fluid Dynamics Laboratory/NOAA Princeton University/Forrestal Campus/Rte. 1 P.O. Box 308 Princeton, NJ, USA 08542 (609) 987-5053 office (609) 987-5063 fax