Beispiel #1
0
def test_progress_cbk():
    crs = epsg4326
    shape = (2, 2)
    no_data = -1
    output_data = np.full(shape, fill_value=no_data, dtype='int16')

    src = FakeDatasetSource([[2, 2], [2, 2]], crs=crs, shape=shape)

    def _cbk(n_so_far, n_total, out):
        out.append((n_so_far, n_total))

    cbk_args = []
    reproject_and_fuse([src],
                       output_data,
                       mk_gbox(shape, crs=crs),
                       dst_nodata=no_data,
                       progress_cbk=lambda *a: _cbk(*a, cbk_args))

    assert cbk_args == [(1, 1)]

    cbk_args = []
    reproject_and_fuse([src, src],
                       output_data,
                       mk_gbox(shape, crs=crs),
                       dst_nodata=no_data,
                       progress_cbk=lambda *a: _cbk(*a, cbk_args))

    assert cbk_args == [(1, 2), (2, 2)]
Beispiel #2
0
def _fuse_measurement(dest,
                      datasets,
                      geobox,
                      measurement,
                      skip_broken_datasets=False,
                      progress_cbk=None,
                      extra_dim_index=None):
    srcs = []
    for ds in datasets:
        src = None
        with ignore_exceptions_if(skip_broken_datasets):
            src = new_datasource(
                BandInfo(ds, measurement.name,
                         extra_dim_index=extra_dim_index))

        if src is None:
            if not skip_broken_datasets:
                raise ValueError(f"Failed to load dataset: {ds.id}")
        else:
            srcs.append(src)

    reproject_and_fuse(srcs,
                       dest,
                       geobox,
                       dest.dtype.type(measurement.nodata),
                       resampling=measurement.get('resampling_method',
                                                  'nearest'),
                       fuse_func=measurement.get('fuser', None),
                       skip_broken_datasets=skip_broken_datasets,
                       progress_cbk=progress_cbk,
                       extra_dim_index=extra_dim_index)
Beispiel #3
0
def test_read_from_broken_source():
    crs = epsg4326
    shape = (2, 2)
    no_data = -1

    source1 = FakeDatasetSource(value=[[1, 1], [no_data, no_data]],
                                crs=crs,
                                band_source_class=BrokenBandDataSource)
    source2 = FakeDatasetSource(value=[[2, 2], [2, 2]], crs=crs)
    sources = [source1, source2]

    output_data = np.full(shape, fill_value=no_data, dtype='int16')

    gbox = mk_gbox(shape, crs=crs)

    # Check exception is raised
    with pytest.raises(OSError):
        reproject_and_fuse(sources, output_data, gbox, dst_nodata=no_data)

    # Check can ignore errors
    reproject_and_fuse(sources,
                       output_data,
                       gbox,
                       dst_nodata=no_data,
                       skip_broken_datasets=True)

    assert (output_data == [[2, 2], [2, 2]]).all()
Beispiel #4
0
def test_when_input_empty():
    shape = (2, 2)
    no_data = -1
    out = np.full(shape, fill_value=no_data, dtype='int16')
    reproject_and_fuse([],
                       out,
                       mk_gbox(shape, crs=epsg4326),
                       dst_nodata=no_data)
    assert (out == no_data).all()
Beispiel #5
0
def _fuse_measurement(dest, datasets, geobox, measurement,
                      skip_broken_datasets=False,
                      progress_cbk=None):
    reproject_and_fuse([new_datasource(BandInfo(dataset, measurement.name)) for dataset in datasets],
                       dest,
                       geobox,
                       dest.dtype.type(measurement.nodata),
                       resampling=measurement.get('resampling_method', 'nearest'),
                       fuse_func=measurement.get('fuser', None),
                       skip_broken_datasets=skip_broken_datasets,
                       progress_cbk=progress_cbk)
Beispiel #6
0
def test_mixed_result_when_first_source_partially_empty():
    crs = epsg4326
    shape = (2, 2)
    no_data = -1

    source1 = FakeDatasetSource([[1, 1], [no_data, no_data]], crs=crs)
    source2 = FakeDatasetSource([[2, 2], [2, 2]], crs=crs)
    sources = [source1, source2]

    output_data = np.full(shape, fill_value=no_data, dtype='int16')
    reproject_and_fuse(sources, output_data, mk_gbox(shape, crs=crs), dst_nodata=no_data)

    assert (output_data == [[1, 1], [2, 2]]).all()
Beispiel #7
0
def test_second_source_used_when_first_is_empty():
    crs = epsg4326
    shape = (2, 2)
    no_data = -1

    source1 = FakeDatasetSource([[-1, -1], [-1, -1]], crs=crs, shape=shape)
    source2 = FakeDatasetSource([[2, 2], [2, 2]], crs=crs, shape=shape)
    sources = [source1, source2]

    output_data = np.full(shape, fill_value=no_data, dtype='int16')
    reproject_and_fuse(sources, output_data, mk_gbox(shape, crs=crs), dst_nodata=no_data)

    assert (output_data == 2).all()
Beispiel #8
0
def test_first_source_is_priority_in_reproject_and_fuse():
    crs = epsg4326
    shape = (2, 2)
    no_data = -1

    source1 = FakeDatasetSource([[1, 1], [1, 1]], crs=crs, shape=shape)
    source2 = FakeDatasetSource([[2, 2], [2, 2]], crs=crs, shape=shape)
    sources = [source1, source2]

    output_data = np.full(shape, fill_value=no_data, dtype='int16')
    reproject_and_fuse(sources, output_data, mk_gbox(shape, crs=crs), dst_nodata=no_data)

    assert (output_data == 1).all()