Exemple #1
0
    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
Exemple #2
0
    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)
Exemple #3
0
    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)