def _load_dataset_with_area(self, dsid, coords, **kwargs): """Load *dsid* and its area if available.""" file_handlers = self._get_file_handlers(dsid) if not file_handlers: return area = self._load_dataset_area(dsid, file_handlers, coords, **kwargs) try: ds = self._load_dataset_data(file_handlers, dsid, **kwargs) except (KeyError, ValueError) as err: logger.exception("Could not load dataset '%s': %s", dsid, str(err)) return None if area is not None: ds.attrs['area'] = area ds = add_crs_xy_coords(ds, area) return ds
def test_swath_def_coordinates(self): """Test coordinates being added with an SwathDefinition.""" import dask.array as da import xarray as xr from pyresample.geometry import SwathDefinition from satpy.resample import add_crs_xy_coords lons_data = da.random.random((200, 100), chunks=50) lats_data = da.random.random((200, 100), chunks=50) lons = xr.DataArray(lons_data, attrs={'units': 'degrees_east'}, dims=('y', 'x')) lats = xr.DataArray(lats_data, attrs={'units': 'degrees_north'}, dims=('y', 'x')) area_def = SwathDefinition(lons, lats) data_arr = xr.DataArray( da.zeros((200, 100), chunks=50), attrs={'area': area_def}, dims=('y', 'x'), ) new_data_arr = add_crs_xy_coords(data_arr, area_def) # See https://github.com/pydata/xarray/issues/3068 # self.assertIn('longitude', new_data_arr.coords) # self.assertIn('units', new_data_arr.coords['longitude'].attrs) # self.assertEqual( # new_data_arr.coords['longitude'].attrs['units'], 'degrees_east') # self.assertIsInstance(new_data_arr.coords['longitude'].data, da.Array) # self.assertIn('latitude', new_data_arr.coords) # self.assertIn('units', new_data_arr.coords['latitude'].attrs) # self.assertEqual( # new_data_arr.coords['latitude'].attrs['units'], 'degrees_north') # self.assertIsInstance(new_data_arr.coords['latitude'].data, da.Array) if CRS is not None: self.assertIn('crs', new_data_arr.coords) crs = new_data_arr.coords['crs'].item() self.assertIsInstance(crs, CRS) self.assertIn('longlat', crs.to_proj4()) self.assertIsInstance(new_data_arr.coords['crs'].item(), CRS)
def test_area_def_coordinates(self): """Test coordinates being added with an AreaDefinition.""" import numpy as np import dask.array as da import xarray as xr from pyresample.geometry import AreaDefinition from satpy.resample import add_crs_xy_coords area_def = AreaDefinition( 'test', 'test', 'test', {'proj': 'lcc', 'lat_1': 25, 'lat_0': 25}, 100, 200, [-100, -100, 100, 100] ) data_arr = xr.DataArray( da.zeros((200, 100), chunks=50), attrs={'area': area_def}, dims=('y', 'x'), ) new_data_arr = add_crs_xy_coords(data_arr, area_def) self.assertIn('y', new_data_arr.coords) self.assertIn('x', new_data_arr.coords) if CRS is not None: self.assertIn('units', new_data_arr.coords['y'].attrs) self.assertEqual( new_data_arr.coords['y'].attrs['units'], 'meter') self.assertIn('units', new_data_arr.coords['x'].attrs) self.assertEqual( new_data_arr.coords['x'].attrs['units'], 'meter') self.assertIn('crs', new_data_arr.coords) self.assertIsInstance(new_data_arr.coords['crs'].item(), CRS) # already has coords data_arr = xr.DataArray( da.zeros((200, 100), chunks=50), attrs={'area': area_def}, dims=('y', 'x'), coords={'y': np.arange(2, 202), 'x': np.arange(100)} ) new_data_arr = add_crs_xy_coords(data_arr, area_def) self.assertIn('y', new_data_arr.coords) self.assertNotIn('units', new_data_arr.coords['y'].attrs) self.assertIn('x', new_data_arr.coords) self.assertNotIn('units', new_data_arr.coords['x'].attrs) np.testing.assert_equal(new_data_arr.coords['y'], np.arange(2, 202)) if CRS is not None: self.assertIn('crs', new_data_arr.coords) self.assertIsInstance(new_data_arr.coords['crs'].item(), CRS) # lat/lon area area_def = AreaDefinition( 'test', 'test', 'test', {'proj': 'latlong'}, 100, 200, [-100, -100, 100, 100] ) data_arr = xr.DataArray( da.zeros((200, 100), chunks=50), attrs={'area': area_def}, dims=('y', 'x'), ) new_data_arr = add_crs_xy_coords(data_arr, area_def) self.assertIn('y', new_data_arr.coords) self.assertIn('x', new_data_arr.coords) if CRS is not None: self.assertIn('units', new_data_arr.coords['y'].attrs) self.assertEqual( new_data_arr.coords['y'].attrs['units'], 'degrees_north') self.assertIn('units', new_data_arr.coords['x'].attrs) self.assertEqual( new_data_arr.coords['x'].attrs['units'], 'degrees_east') self.assertIn('crs', new_data_arr.coords) self.assertIsInstance(new_data_arr.coords['crs'].item(), CRS)