Exemplo n.º 1
0
def test_merge_datasets():
    dem_test = os.path.join(
        TEST_INPUT_DATA_DIR, "MOD09GA.A2008296.h14v17.006.2015181011753.hdf"
    )
    with open_rasterio(dem_test, group="MODIS_Grid_500m_2D") as rds:
        datasets = [
            rds.isel(x=slice(600), y=slice(600)),
            rds.isel(x=slice(600, None), y=slice(600, None)),
            rds.isel(x=slice(600), y=slice(600, None)),
            rds.isel(x=slice(600, None), y=slice(600)),
        ]
        merged = merge_datasets(datasets)
    data_vars = sorted(merged.data_vars)
    assert data_vars == [
        "QC_500m_1",
        "iobs_res_1",
        "num_observations_500m",
        "obscov_500m_1",
        "sur_refl_b01_1",
        "sur_refl_b02_1",
        "sur_refl_b03_1",
        "sur_refl_b04_1",
        "sur_refl_b05_1",
        "sur_refl_b06_1",
        "sur_refl_b07_1",
    ]
    data_var = data_vars[0]
    if RASTERIO_GE_125:
        assert_almost_equal(
            merged[data_var].rio.bounds(),
            (-4447802.078667, -10007554.677, -3335851.559, -8895604.157333),
        )
        assert merged.rio.shape == (2400, 2400)
        assert_almost_equal(merged[data_var].sum(), 4539666606551516)
    else:
        assert_almost_equal(
            merged[data_var].rio.bounds(),
            (-4447802.078667, -10008017.989716524, -3335388.246283474, -8895604.157333),
        )
        assert merged.rio.shape == (2401, 2401)
        assert_almost_equal(merged[data_var].sum(), 4543446965182987)
    assert_almost_equal(
        tuple(merged[data_var].rio.transform()),
        (
            463.3127165279158,
            0.0,
            -4447802.078667,
            0.0,
            -463.3127165279151,
            -8895604.157333,
            0.0,
            0.0,
            1.0,
        ),
    )
    assert merged.coords["band"].values == [1]
    assert sorted(merged.coords) == ["band", "spatial_ref", "x", "y"]
    assert merged.rio.crs == rds.rio.crs
    assert merged.attrs == rds.attrs
    assert merged.encoding["grid_mapping"] == "spatial_ref"
Exemplo n.º 2
0
def test_merge__different_crs(dataset):
    dem_test = os.path.join(TEST_INPUT_DATA_DIR, "MODIS_ARRAY.nc")
    with open_rasterio(dem_test) as rds:
        crs = rds.rio.crs
        if dataset:
            rds = rds.to_dataset()
        arrays = [
            rds.isel(x=slice(100), y=slice(100)).rio.reproject("EPSG:3857"),
            rds.isel(x=slice(100, 200), y=slice(100, 200)),
            rds.isel(x=slice(100), y=slice(100, 200)),
            rds.isel(x=slice(100, 200), y=slice(100)),
        ]
        if dataset:
            merged = merge_datasets(arrays, crs=crs)
        else:
            merged = merge_arrays(arrays, crs=crs)
    assert_almost_equal(
        merged.rio.bounds(),
        (-7300984.0238134, 5003618.5908794, -7223500.6583578, 5050108.6101528),
    )
    assert_almost_equal(
        tuple(merged.rio.transform()),
        (
            553.4526103969893,
            0.0,
            -7300984.023813409,
            0.0,
            -553.4526103969796,
            5050108.610152751,
            0.0,
            0.0,
            1.0,
        ),
    )
    assert merged.rio.shape == (84, 140)
    assert merged.coords["band"].values == [1]
    assert sorted(merged.coords) == ["band", "spatial_ref", "x", "y"]
    assert merged.rio.crs == rds.rio.crs
    if dataset:
        assert merged.attrs == {"grid_mapping": "spatial_ref"}
        assert_almost_equal(merged[merged.rio.vars[0]].sum(), -131013894)
    else:
        assert merged.attrs == {
            "_FillValue": -28672,
            "add_offset": 0.0,
            "grid_mapping": "spatial_ref",
            "scale_factor": 1.0,
        }
        assert_almost_equal(merged.sum(), -131013894)
Exemplo n.º 3
0
def test_merge_datasets__res():
    dem_test = os.path.join(TEST_INPUT_DATA_DIR,
                            "MOD09GA.A2008296.h14v17.006.2015181011753.hdf")
    with open_rasterio(dem_test, group="MODIS_Grid_500m_2D") as rds:
        datasets = [
            rds.isel(x=slice(1200), y=slice(1200)),
            rds.isel(x=slice(1200, None), y=slice(1200, None)),
            rds.isel(x=slice(1200), y=slice(1200, None)),
            rds.isel(x=slice(1200, None), y=slice(1200)),
        ]
        merged = merge_datasets(datasets, res=1000)
    data_vars = sorted(merged.data_vars)
    assert data_vars == [
        "QC_500m_1",
        "iobs_res_1",
        "num_observations_500m",
        "obscov_500m_1",
        "sur_refl_b01_1",
        "sur_refl_b02_1",
        "sur_refl_b03_1",
        "sur_refl_b04_1",
        "sur_refl_b05_1",
        "sur_refl_b06_1",
        "sur_refl_b07_1",
    ]
    data_var = data_vars[0]
    assert_almost_equal(
        merged[data_var].rio.bounds(),
        (-4447802.078667, -10007604.157333, -3335802.078667, -8895604.157333),
    )
    assert_almost_equal(
        tuple(merged[data_var].rio.transform()),
        (1000.0, 0.0, -4447802.078667, 0.0, -1000.0, -8895604.157333, 0.0, 0.0,
         1.0),
    )
    assert merged.rio.shape == (1112, 1112)
    assert merged.coords["band"].values == [1]
    assert sorted(merged.coords) == ["band", "spatial_ref", "x", "y"]
    assert merged.rio.crs == rds.rio.crs
    base_attrs = dict(rds.attrs)
    base_attrs["grid_mapping"] = "spatial_ref"
    assert merged.attrs == base_attrs
    if LooseVersion(gdal_version()) >= LooseVersion("2.4.4"):
        assert_almost_equal(merged[data_var].sum(), 974565505482489)
    else:
        assert_almost_equal(merged[data_var].sum(), 974565970607345)