Greetings, I've been following this conversation on coordinate systems for some time now, partly because it's my job and partly because it's interesting. Recently, I've been learning about a new data-model called the "field" data-model (FDM). I think it provides a useful framework for understanding the situation and -- with your indulgence -- I'd like to use it to present an analysis and to propose a solution. In a nutshell, the FDM comprises three coordinate systems, the transformations between them, and the same dependent variable in all three systems. The coordinate systems have the following names: MANIFOLD BASE WORLD We are already familiar with the manifold coordinate system of a variable: it is nothing more than the variable's netCDF dimensions in the absence of any "coordinate" variables. For example, the variable "var" in the following dimensions: i = 5; j = 6; variables: float var(i,j); is defined in the 2-D manifold coordinate system (i,j). The base coordinate system, on the other hand, is the coordinate system in which we normally think of the variable. For example, the variable "var" above could actually be surface temperature on the Earth, in which case the ""i and "j" MANIFOLD coordinates should undoubtably map to latitude and longitude BASE coordinates. Currently, the netCDF model handles this via "coordinate variables", e.g. dimensions: lat = 5; lon = 6; variables: float temp(lat,lon); float lat(lat); float lon(lon); In the above, the "lat" and "lon" dimensions comprise the "temp" variable's manifold coordinate system. The "lat" and "lon" variables, on the other hand, comprise the variable's base coordinate system. For manifold and base coordinate system that are representable in this way, this convention allows us to easily convert between the two coordinate systems. The problem is that not all useful manifold and base coordinate systems are representable by this convention. For one thing, a variable's base coordinates might not be on the regular (i.e. Cartesian product) grid implied by this convention. For another, it is difficult to represent a variable whose manifold coordinate system has fewer dimensions than its base coordinate system. As an example of the later situation, think of the temperature along a spiral of wire, one end of which is hot and the other cold. The manifold coordinate system for this is one-dimensional: it is the position along the wire from one end. The base coordinate system, on the other hand, is three dimensional (one possibility would be a cylindrical coordinate system). There is currently no "official" way for the netCDF model to handle these more complicated situations ("official" in this sense means "in the netCDF User's Guide" :-). Thus, we need a convention for representing the transformation between a variable's manifold coordinates and the variable's base coordinates that goes beyond the capabilities of netCDF coordinate variables. Ideally, such a convention 1. Should be easily understandable. 2. Shouldn't break existing applications, i.e. it should be possible to operate applications that are unaware of the convention -- though the operation might not have all the capability of an "aware" application. 3. Should be general enough to handle any transformation between manifold and base coordinate systems. 4. Should be efficient. There appear to be two major categories of proposed conventions to handle this problem. The categories are: 1. Multidimensional coordinate variables; and 2. Referential attributes. Here's an example of a multidimensional coordinate variable approach for a temperature variable that is defined at irregular positions on the Earth: dimensions: lat = 5; lon = 6; variables: float temp(lat,lon); float lat(lat,lon); float lon(lat,lon); Here, both "lat" and "lon" have double meanings. In one sense, "lat" is one of the manifold coordinates (and could have very little to do with latitude); in the other sense, "lat" is a variable that associates a base coordinate (latitude) with every position in the manifold domain. Personally, I do not like this use of the same name to refer to different coordinates in different coordinate systems. I feel that it can lead to confusion (for the record, I admit that this argument can be made against the current system of 1-D coordinate variables). I also fear that it will break existing applications that assume one-dimensional coordinate variables Here's an example of a referential attribute approach for the same problem: dimensions: i = 5; j = 6; variables: float temp(i,j); temp:coordinates = "lat, lon"; float lat(i,j); float lon(i,j); In this system, the names for manifold and base coordinates are distinct. I believe this has the advantages of being clearer (at the expense of being more verbose) and of not breaking existing applications, which would limited to working in the manifold (i,j) coordinate system. This approach is quite general. Here's an example of a base coordinate system comprising a moving x-y grid (e.g. for tracking a storm): dimensions: i = 32; j = 64; time = 100; variables: float var(time, i, j); var:coordinates = "time, lat, lon"; float lat(time, i, j); float lon(time, i, j); float time(time); And here's an example of the previously mentioned spiral situation using a 1-D manifold coordinate system and a 3-D (cylindrical) base coordinate system: dimensions: s = 100; variables: float temp(s); // temperature along spiral temp:coordinates = "z, rho, theta"; // cylindrical coordinate system (CCS) float rho(s); // distance from CCS center axis float theta(s); // CCS azimuth float z(s); // CCS height I think the key concept is the distinction between manifold coordinate space (in which the phenomena is defined) and base coordinate space (in which we want to work). Only in the simplest cases are they identical. DISCLAIMER: I work at the Unidata Program Center -- sometimes on the netCDF package -- but I most definitely do not speak for the netCDF team. Regards, Steve Emmerson <http://www.unidata.ucar.edu>