html_url,issue_url,id,node_id,user,created_at,updated_at,author_association,body,reactions,performed_via_github_app,issue https://github.com/pydata/xarray/pull/1260#issuecomment-305417871,https://api.github.com/repos/pydata/xarray/issues/1260,305417871,MDEyOklzc3VlQ29tbWVudDMwNTQxNzg3MQ==,1392657,2017-06-01T07:53:59Z,2017-06-01T07:53:59Z,CONTRIBUTOR,"Hey @fmaussion, is this ready for me to try out again? I wanted to let you and @shoyer iterate first.","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,206905158 https://github.com/pydata/xarray/pull/1260#issuecomment-303370889,https://api.github.com/repos/pydata/xarray/issues/1260,303370889,MDEyOklzc3VlQ29tbWVudDMwMzM3MDg4OQ==,1392657,2017-05-23T11:34:47Z,2017-05-23T11:34:47Z,CONTRIBUTOR,Sounds good!,"{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,206905158 https://github.com/pydata/xarray/pull/1260#issuecomment-303330504,https://api.github.com/repos/pydata/xarray/issues/1260,303330504,MDEyOklzc3VlQ29tbWVudDMwMzMzMDUwNA==,1392657,2017-05-23T08:37:59Z,2017-05-23T08:37:59Z,CONTRIBUTOR,"Note that the above `tiff` was made with something like the following code: ``` res = 0.5 nlat = 180 nlon = 360 left_lon = -180 upper_lat = 90 crs = 'epsg:4326' profile = { 'affine': rio.Affine(res, 0.0, left_lon, 0.0, -res, upper_lat), 'dtype': 'int32', 'height': int(nlat / res), 'width': int(nlon / res), 'nodata': '-1', 'crs': crs, } ```","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,206905158 https://github.com/pydata/xarray/pull/1260#issuecomment-303330186,https://api.github.com/repos/pydata/xarray/issues/1260,303330186,MDEyOklzc3VlQ29tbWVudDMwMzMzMDE4Ng==,1392657,2017-05-23T08:36:46Z,2017-05-23T08:36:46Z,CONTRIBUTOR,"Hey @fmaussion, I guess my question here is as follows: if a raster was generated by rasterio (thus using a dictionary representation of the CRS object even if a string is provided), should xarrary then fail to write to netcdf with that dataset? If so, then that means that all users will have to do ``` ds = open_rasterio('file.tiff') ds.attrs['crs'] = ds.attrs['crs'].to_string() ds.to_netcdf('file.nc') ``` Would it be better to use the string representation of the CRS internally after reading in? I think this would solve @shoyer's concern about onboarding non-primitive datatypes. As an aside, even my above suggestion did not work.. I'm not sure why. ``` In [33]: ds = xr.open_rasterio('./isimip_centroid_0_5.tiff') In [34]: ds Out[34]: Dimensions: (band: 1, x: 720, y: 360) Coordinates: * y (y) float64 90.0 89.5 89.0 88.5 88.0 87.5 87.0 86.5 86.0 85.5 ... * x (x) float64 -180.0 -179.5 -179.0 -178.5 -178.0 -177.5 -177.0 ... * band (band) int64 1 Data variables: raster (band, y, x) int32 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ... Attributes: crs: CRS({'init': u'epsg:4326'}) In [35]: ds.attrs['crs'] = ds.attrs['crs'].to_string() In [36]: ds Out[36]: Dimensions: (band: 1, x: 720, y: 360) Coordinates: * y (y) float64 90.0 89.5 89.0 88.5 88.0 87.5 87.0 86.5 86.0 85.5 ... * x (x) float64 -180.0 -179.5 -179.0 -178.5 -178.0 -177.5 -177.0 ... * band (band) int64 1 Data variables: raster (band, y, x) int32 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ... Attributes: crs: +init=epsg:4326 In [37]: ds.to_netcdf('test.nc') --------------------------------------------------------------------------- TypeError Traceback (most recent call last) in () ----> 1 ds.to_netcdf('test.nc') /home/gidden/.local/lib/python2.7/site-packages/xarray-0.9.5_34_g48c7268-py2.7.egg/xarray/core/dataset.pyc in to_netcdf(self, path, mode, format, group, engine, encoding, unlimited_dims) 975 return to_netcdf(self, path, mode, format=format, group=group, 976 engine=engine, encoding=encoding, --> 977 unlimited_dims=unlimited_dims) 978 979 def __unicode__(self): /home/gidden/.local/lib/python2.7/site-packages/xarray-0.9.5_34_g48c7268-py2.7.egg/xarray/backends/api.pyc in to_netcdf(dataset, path_or_file, mode, format, group, engine, writer, encoding, unlimited_dims) 588 # validate Dataset keys, DataArray names, and attr keys/values 589 _validate_dataset_names(dataset) --> 590 _validate_attrs(dataset) 591 592 try: /home/gidden/.local/lib/python2.7/site-packages/xarray-0.9.5_34_g48c7268-py2.7.egg/xarray/backends/api.pyc in _validate_attrs(dataset) 119 for variable in dataset.variables.values(): 120 for k, v in variable.attrs.items(): --> 121 check_attr(k, v) 122 123 /home/gidden/.local/lib/python2.7/site-packages/xarray-0.9.5_34_g48c7268-py2.7.egg/xarray/backends/api.pyc in check_attr(name, value) 110 'string, ndarray or a list/tuple of ' 111 'numbers/strings for serialization to netCDF ' --> 112 'files'.format(value)) 113 114 # Check attrs on the dataset itself TypeError: Invalid value for attr: CRS({'init': u'epsg:4326'}) must be a number string, ndarray or a list/tuple of numbers/strings for serialization to netCDF files ```","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,206905158 https://github.com/pydata/xarray/pull/1260#issuecomment-303317475,https://api.github.com/repos/pydata/xarray/issues/1260,303317475,MDEyOklzc3VlQ29tbWVudDMwMzMxNzQ3NQ==,1392657,2017-05-23T07:47:35Z,2017-05-23T07:57:34Z,CONTRIBUTOR,"Hey @fmaussion, should we also do any attribute checking, or should we let the user fails as follows? I recently was testing this out and made a `*.tiff` with a shapefile as read from `fiona`. I got the following error: ``` In [12]: ds Out[12]: Dimensions: (band: 1, x: 720, y: 360) Coordinates: * y (y) float64 90.0 89.5 89.0 88.5 88.0 87.5 87.0 86.5 86.0 85.5 ... * x (x) float64 -180.0 -179.5 -179.0 -178.5 -178.0 -177.5 -177.0 ... * band (band) int64 1 Data variables: raster (band, y, x) int32 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ... Attributes: crs: CRS({'init': u'epsg:4326'}) In [13]: ds.to_netcdf('test.nc') --------------------------------------------------------------------------- TypeError Traceback (most recent call last) in () ----> 1 ds.to_netcdf('test.nc') /home/gidden/.local/lib/python2.7/site-packages/xarray-0.9.5_34_g48c7268-py2.7.egg/xarray/core/dataset.pyc in to_netcdf(self, path, mode, format, group, engine, encoding, unlimited_dims) 975 return to_netcdf(self, path, mode, format=format, group=group, 976 engine=engine, encoding=encoding, --> 977 unlimited_dims=unlimited_dims) 978 979 def __unicode__(self): /home/gidden/.local/lib/python2.7/site-packages/xarray-0.9.5_34_g48c7268-py2.7.egg/xarray/backends/api.pyc in to_netcdf(dataset, path_or_file, mode, format, group, engine, writer, encoding, unlimited_dims) 588 # validate Dataset keys, DataArray names, and attr keys/values 589 _validate_dataset_names(dataset) --> 590 _validate_attrs(dataset) 591 592 try: /home/gidden/.local/lib/python2.7/site-packages/xarray-0.9.5_34_g48c7268-py2.7.egg/xarray/backends/api.pyc in _validate_attrs(dataset) 114 # Check attrs on the dataset itself 115 for k, v in dataset.attrs.items(): --> 116 check_attr(k, v) 117 118 # Check attrs on each variable within the dataset /home/gidden/.local/lib/python2.7/site-packages/xarray-0.9.5_34_g48c7268-py2.7.egg/xarray/backends/api.pyc in check_attr(name, value) 110 'string, ndarray or a list/tuple of ' 111 'numbers/strings for serialization to netCDF ' --> 112 'files'.format(value)) 113 114 # Check attrs on the dataset itself TypeError: Invalid value for attr: CRS({'init': u'epsg:4326'}) must be a number string, ndarray or a list/tuple of numbers/strings for serialization to netCDF files ``` And it seems like this happens whether I use a dictionary originally or just a string. Perhaps this is a slightly larger issue with cleaning the CRS object such that it is netcdf compatible? Does this mean just a ``` crs = ' '.join('+{}={}'.format(k, v) for k, v in crs.items()) ``` '?","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,206905158 https://github.com/pydata/xarray/pull/1260#issuecomment-303005011,https://api.github.com/repos/pydata/xarray/issues/1260,303005011,MDEyOklzc3VlQ29tbWVudDMwMzAwNTAxMQ==,12229877,2017-05-22T05:49:37Z,2017-05-22T05:49:37Z,CONTRIBUTOR,"I would also favour doing nothing (ie 3), because most users will already have some solution. It's also easier to change later if we don't do anything now - no need to think at all about backwards compatibility, and the design can be guided by how people are using the existing parts.","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,206905158 https://github.com/pydata/xarray/pull/1260#issuecomment-302945676,https://api.github.com/repos/pydata/xarray/issues/1260,302945676,MDEyOklzc3VlQ29tbWVudDMwMjk0NTY3Ng==,1392657,2017-05-21T16:02:01Z,2017-05-21T16:02:01Z,CONTRIBUTOR,"Hey @fmaussion, I personally think some lat/lon support should be included here. I would lean toward *1* personally, but would be interested in what others think.","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,206905158