示例#1
0
def test_open_rasterio_mask_chunk_clip():
    with rioxarray.open_rasterio(
            os.path.join(TEST_COMPARE_DATA_DIR, "small_dem_3m_merged.tif"),
            masked=True,
            chunks=True,
            default_name="dem",
    ) as xdi:
        assert xdi.name == "dem"
        assert str(xdi.dtype) == "float64"
        assert str(xdi.data.dtype) == "float64"
        assert str(type(xdi.data)) == "<class 'dask.array.core.Array'>"
        assert xdi.chunks == ((1, ), (245, ), (574, ))
        assert np.isnan(xdi.values).sum() == 52119
        test_encoding = dict(xdi.encoding)
        assert test_encoding.pop("source").endswith("small_dem_3m_merged.tif")
        assert test_encoding == {"_FillValue": 0.0}
        attrs = dict(xdi.attrs)
        assert_almost_equal(
            tuple(xdi.rio._cached_transform())[:6],
            (3.0, 0.0, 425047.68381405267, 0.0, -3.0, 4615780.040546387),
        )
        assert attrs == {
            "grid_mapping": "spatial_ref",
            "add_offset": 0.0,
            "scale_factor": 1.0,
        }

        # get subset for testing
        subset = xdi.isel(x=slice(150, 160), y=slice(100, 150))
        comp_subset = subset.isel(x=slice(1, None), y=slice(1, None))
        # add transform for test
        comp_subset.rio.write_transform()

        geometries = [{
            "type":
            "Polygon",
            "coordinates": [[
                [subset.x.values[0], subset.y.values[-1]],
                [subset.x.values[0], subset.y.values[0]],
                [subset.x.values[-1], subset.y.values[0]],
                [subset.x.values[-1], subset.y.values[-1]],
                [subset.x.values[0], subset.y.values[-1]],
            ]],
        }]

        # test data array
        clipped = xdi.rio.clip(geometries, comp_subset.rio.crs)
        _assert_xarrays_equal(clipped, comp_subset)
        test_encoding = dict(clipped.encoding)
        assert test_encoding.pop("source").endswith("small_dem_3m_merged.tif")
        assert test_encoding == {"_FillValue": 0.0}

        # test dataset
        clipped_ds = xdi.to_dataset(name="test_data").rio.clip(
            geometries, subset.rio.crs)
        comp_subset_ds = comp_subset.to_dataset(name="test_data")
        _assert_xarrays_equal(clipped_ds, comp_subset_ds)
        test_encoding = dict(clipped.encoding)
        assert test_encoding.pop("source").endswith("small_dem_3m_merged.tif")
        assert test_encoding == {"_FillValue": 0.0}
示例#2
0
def test_reproject__no_nodata(modis_reproject):
    mask_args = (dict(masked=False) if modis_reproject["open"].__name__
                 == "open_rasterio" else dict(mask_and_scale=False))
    with modis_reproject["open"](modis_reproject["input"],
                                 **mask_args) as mda, modis_reproject["open"](
                                     modis_reproject["compare"],
                                     **mask_args) as mdc:
        orig_fill = _get_attr(mda, "_FillValue")
        _del_attr(mda, "_FillValue")
        _del_attr(mda, "nodata")
        # reproject
        mds_repr = mda.rio.reproject(modis_reproject["to_proj"])

        # overwrite test dataset
        # if isinstance(modis_reproject['open'], xarray.DataArray):
        #    mds_repr.to_netcdf(modis_reproject['compare'])

        # replace -9999 with original _FillValue for testing
        if hasattr(mds_repr, "variables"):
            for var in mds_repr.rio.vars:
                mds_repr[var].values[mds_repr[var].values == -9999] = orig_fill
        else:
            mds_repr.values[mds_repr.values == -9999] = orig_fill
        _mod_attr(mdc, "_FillValue", val=-9999)
        # test
        _assert_xarrays_equal(mds_repr, mdc)
示例#3
0
def test_interpolate_na_3d(interpolate_na_3d):
    with xarray.open_dataset(
            interpolate_na_3d["input"]) as mda, xarray.open_dataset(
                interpolate_na_3d["compare"]) as mdc:
        interpolated_ds = mda.rio.interpolate_na()
        # test
        _assert_xarrays_equal(interpolated_ds, mdc)
示例#4
0
def test_reproject__masked(modis_reproject):
    with modis_reproject["open"](
            modis_reproject["input"]) as mda, modis_reproject["open"](
                modis_reproject["compare"]) as mdc:
        # reproject
        mds_repr = mda.rio.reproject(modis_reproject["to_proj"])
        # test
        _assert_xarrays_equal(mds_repr, mdc)
示例#5
0
def test_interpolate_na(interpolate_na):
    mask_args = (dict(masked=False) if interpolate_na["open"].__name__
                 == "open_rasterio" else dict(mask_and_scale=False))
    with interpolate_na["open"](interpolate_na["input"],
                                **mask_args) as mda, interpolate_na["open"](
                                    interpolate_na["compare"],
                                    **mask_args) as mdc:
        interpolated_ds = mda.rio.interpolate_na()
        # test
        _assert_xarrays_equal(interpolated_ds, mdc)
示例#6
0
def test_reproject(modis_reproject):
    mask_args = (dict(masked=False) if modis_reproject["open"].__name__
                 == "open_rasterio" else dict(mask_and_scale=False))
    with modis_reproject["open"](modis_reproject["input"],
                                 **mask_args) as mda, modis_reproject["open"](
                                     modis_reproject["compare"],
                                     **mask_args) as mdc:
        mds_repr = mda.rio.reproject(modis_reproject["to_proj"])
        # test
        _assert_xarrays_equal(mds_repr, mdc)
示例#7
0
def test_geographic_resample_integer(request):
    sentinel_2_geographic = os.path.join(TEST_INPUT_DATA_DIR,
                                         "sentinel_2_L1C_geographic.nc")
    sentinel_2_interp = os.path.join(TEST_COMPARE_DATA_DIR,
                                     "sentinel_2_L1C_interpolate_na.nc")
    with request.param(sentinel_2_geographic) as mda, request.param(
            sentinel_2_interp) as mdc:
        mds_interp = mda.rio.interpolate_na()
        # mds_interp.to_netcdf(sentinel_2_interp)
        # test
        _assert_xarrays_equal(mds_interp, mdc)
示例#8
0
def test_geographic_reproject(request):
    sentinel_2_geographic = os.path.join(TEST_INPUT_DATA_DIR,
                                         "sentinel_2_L1C_geographic.nc")
    sentinel_2_utm = os.path.join(TEST_COMPARE_DATA_DIR,
                                  "sentinel_2_L1C_utm.nc")
    with request.param(sentinel_2_geographic) as mda, request.param(
            sentinel_2_utm) as mdc:
        mds_repr = mda.rio.reproject("+init=epsg:32721")
        # mds_repr.to_netcdf(sentinel_2_utm)
        # test
        _assert_xarrays_equal(mds_repr, mdc)
示例#9
0
def test_reproject_match__masked(modis_reproject_match):
    mask_args = (dict(masked=True) if modis_reproject_match["open"].__name__
                 == "open_rasterio" else dict(mask_and_scale=True))
    with modis_reproject_match["open"](
            modis_reproject_match["input"],
            **mask_args) as mda, modis_reproject_match["open"](
                modis_reproject_match["compare"],
                **mask_args) as mdc, xarray.open_dataarray(
                    modis_reproject_match["match"]) as mdm:
        # reproject
        mds_repr = mda.rio.reproject_match(mdm)
        # test
        _assert_xarrays_equal(mds_repr, mdc)
示例#10
0
def test_reproject__no_transform(modis_reproject):
    with modis_reproject["open"](
            modis_reproject["input"]) as mda, modis_reproject["open"](
                modis_reproject["compare"]) as mdc:
        orig_trans = _get_attr(mda, "transform")
        _del_attr(mda, "transform")
        # reproject
        mds_repr = mda.rio.reproject(modis_reproject["to_proj"])
        # test
        if hasattr(mds_repr, "variables"):
            for var in mds_repr.rio.vars:
                assert_array_equal(orig_trans, tuple(mda[var].rio.transform()))
        else:
            assert_array_equal(orig_trans, tuple(mda.rio.transform()))
        _assert_xarrays_equal(mds_repr, mdc)
示例#11
0
def test_clip_box(modis_clip):
    with modis_clip["open"](modis_clip["input"]) as xdi, modis_clip["open"](
            modis_clip["compare"]) as xdc:
        clipped_ds = xdi.rio.clip_box(
            minx=xdi.x[4].values,
            miny=xdi.y[6].values,
            maxx=xdi.x[6].values,
            maxy=xdi.y[4].values,
        )
        if isinstance(xdc, xarray.Dataset):
            xdc.attrs["creation_date"] = clipped_ds.attrs["creation_date"]
        _assert_xarrays_equal(clipped_ds, xdc)

        # make sure it safely writes to netcdf
        clipped_ds.to_netcdf(modis_clip["output"])
示例#12
0
def test_interpolate_na__nodata_filled(interpolate_na_filled):
    mask_args = (dict(masked=False) if interpolate_na_filled["open"].__name__
                 == "open_rasterio" else dict(mask_and_scale=False))
    with interpolate_na_filled["open"](
            interpolate_na_filled["input"],
            **mask_args) as mda, interpolate_na_filled["open"](
                interpolate_na_filled["compare"], **mask_args) as mdc:
        if hasattr(mda, "variables"):
            for var in mda.rio.vars:
                mda[var].values[mda[var].values == mda[var].rio.nodata] = 400
        else:
            mda.values[mda.values == mda.rio.nodata] = 400

        interpolated_ds = mda.rio.interpolate_na()
        # test
        _assert_xarrays_equal(interpolated_ds, mdc)
示例#13
0
def test_interpolate_na__all_nodata(interpolate_na_nan):
    rio_opened = interpolate_na_nan["open"].__name__ == "open_rasterio"
    mask_args = dict(masked=True) if rio_opened else dict(mask_and_scale=True)
    with interpolate_na_nan["open"](
            interpolate_na_nan["input"],
            **mask_args) as mda, interpolate_na_nan["open"](
                interpolate_na_nan["compare"], **mask_args) as mdc:
        if hasattr(mda, "variables"):
            for var in mda.rio.vars:
                mda[var].values[~numpy.isnan(mda[var].values)] = numpy.nan
        else:
            mda.values[~numpy.isnan(mda.values)] = numpy.nan

        interpolated_ds = mda.rio.interpolate_na()
        if rio_opened and "__xarray_dataarray_variable__" in mdc:
            mdc = mdc["__xarray_dataarray_variable__"]
            mdc.attrs.pop("coordinates")
        # test
        _assert_xarrays_equal(interpolated_ds, mdc)
示例#14
0
def test_reproject__grid_mapping(modis_reproject):
    mask_args = (dict(masked=False) if modis_reproject["open"].__name__
                 == "open_rasterio" else dict(mask_and_scale=False))
    with modis_reproject["open"](modis_reproject["input"],
                                 **mask_args) as mda, modis_reproject["open"](
                                     modis_reproject["compare"],
                                     **mask_args) as mdc:

        # remove 'crs' attribute and add grid mapping
        mda.coords["spatial_ref"] = 0
        mda.coords["spatial_ref"].attrs["spatial_ref"] = CRS.from_user_input(
            _get_attr(mda, "crs")).wkt
        _mod_attr(mda, "grid_mapping", val="spatial_ref")
        _del_attr(mda, "crs")
        mdc.coords["spatial_ref"] = 0
        mdc.coords["spatial_ref"].attrs["spatial_ref"] = CRS.from_user_input(
            _get_attr(mdc, "crs")).wkt
        _mod_attr(mdc, "grid_mapping", val="spatial_ref")
        _del_attr(mdc, "crs")

        # reproject
        mds_repr = mda.rio.reproject(modis_reproject["to_proj"])
        # test
        _assert_xarrays_equal(mds_repr, mdc)
示例#15
0
def test_clip_geojson(request):
    with request.param(
            os.path.join(TEST_COMPARE_DATA_DIR,
                         "small_dem_3m_merged.tif")) as xdi:
        # get subset for testing
        subset = xdi.isel(x=slice(150, 160), y=slice(100, 150))
        comp_subset = subset.isel(x=slice(1, None), y=slice(1, None))
        # add transform for test
        comp_subset.attrs["transform"] = tuple(
            comp_subset.rio.transform(recalc=True))
        # add grid mapping for test
        comp_subset.rio.write_crs(subset.rio.crs, inplace=True)
        # make sure nodata exists for test
        comp_subset.attrs["_FillValue"] = comp_subset.rio.nodata

        geometries = [{
            "type":
            "Polygon",
            "coordinates": [[
                [subset.x.values[0], subset.y.values[-1]],
                [subset.x.values[0], subset.y.values[0]],
                [subset.x.values[-1], subset.y.values[0]],
                [subset.x.values[-1], subset.y.values[-1]],
                [subset.x.values[0], subset.y.values[-1]],
            ]],
        }]

        # test data array
        clipped = xdi.rio.clip(geometries, comp_subset.rio.crs)
        _assert_xarrays_equal(clipped, comp_subset)

        # test dataset
        clipped_ds = xdi.to_dataset(name="test_data").rio.clip(
            geometries, subset.rio.crs)
        comp_subset_ds = comp_subset.to_dataset(name="test_data")
        _assert_xarrays_equal(clipped_ds, comp_subset_ds)
示例#16
0
def test_reproject_3d(request, modis_reproject_3d):
    with request.param(modis_reproject_3d["input"]) as mda, request.param(
            modis_reproject_3d["compare"]) as mdc:
        mds_repr = mda.rio.reproject(modis_reproject_3d["to_proj"])
        # test
        _assert_xarrays_equal(mds_repr, mdc)