-
-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Description
What happened?
When saving a dataset to a NetCDF file with both dimension and auxiliary coordinates, the data variables' coordinate attribute only lists the coordinates that are not related to any dimension (so-called "auxiliary" coordinates).
What did you expect to happen?
I expect xarray to adhere to the CF conventions where it says:
Every element of every feature must be unambiguously associated with its space and time coordinates and with the feature that contains it. The coordinates attribute must be attached to every data variable to indicate the spatiotemporal coordinate variables that are needed to geo-locate the data.
[from https://cfconventions.org/cf-conventions/cf-conventions.html#coordinates-metadata]
See also this example: https://cfconventions.org/cf-conventions/cf-conventions.html#_single_trajectory
Minimal Complete Verifiable Example
import xarray as xr
xr.Dataset({"values": ('time', [0.0, 0.1])},
coords={
'time': ('time', [0, 1]),
'lat': ('time', [5, 4]),
'lon': ('time', [10, 12])
}).to_netcdf("test.nc")$ ncdump -h test.nc
netcdf test {
dimensions:
time = 2 ;
variables:
double values(time) ;
values:_FillValue = NaN ;
values:coordinates = "lon lat" ;
int64 time(time) ;
int64 lat(time) ;
int64 lon(time) ;
}Note that values:coordinates doesn't list the time coordinate (as in the example in the CF conventions).
Relevant log output
No response
Anything else we need to know?
I don't want to offend anyone, please correct me if I read the CF conventions in the wrong way or if this is a special case, and in general, the CF conventions recommend to only include auxiliary coordinates in the coordinates attribute. I couldn't find any such recommendation in the conventions text, but it's a very long document. What I did find (see my second post) is that it is "permissible, but optional" to list non-auxiliary variables in general, and it is required for the special case of "Discrete Sampling Geometries".
Environment
INSTALLED VERSIONS
------------------
commit: None
python: 3.8.12 | packaged by conda-forge | (default, Oct 12 2021, 21:59:51)
[GCC 9.4.0]
python-bits: 64
OS: Linux
OS-release: 5.4.0-100-generic
machine: x86_64
processor: x86_64
byteorder: little
LC_ALL: None
LANG: en_US.UTF-8
LOCALE: ('en_US', 'UTF-8')
libhdf5: 1.12.1
libnetcdf: 4.8.1
xarray: 0.19.0
pandas: 1.3.4
numpy: 1.21.4
scipy: 1.7.0
netCDF4: 1.5.8
pydap: None
h5netcdf: None
h5py: 3.4.0
Nio: None
zarr: None
cftime: 1.5.1.1
nc_time_axis: None
PseudoNetCDF: None
rasterio: 1.2.10
cfgrib: 0.9.9.0
iris: None
bottleneck: 1.3.2
dask: 2021.07.1
distributed: 2021.07.1
matplotlib: 3.4.2
cartopy: 0.20.1
seaborn: None
numbagg: None
pint: 0.17
setuptools: 59.2.0
pip: 21.2.1
conda: None
pytest: None
IPython: 7.29.0
sphinx: None