Exemplo n.º 1
0
def test_read_from_broken_source():
    crs = geometry.CRS('EPSG:4326')
    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')

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

    # Check can ignore errors
    reproject_and_fuse(sources,
                       output_data,
                       dst_transform=identity,
                       dst_projection=crs,
                       dst_nodata=no_data,
                       skip_broken_datasets=True)

    assert (output_data == [[2, 2], [2, 2]]).all()
Exemplo n.º 2
0
def test_read_from_broken_source():
    crs = mock.MagicMock()
    shape = (2, 2)
    no_data = -1

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

    rio_reader = source1.open.return_value.__enter__.return_value
    rio_reader.read.side_effect = OSError('Read or write failed')

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

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

    # Check can ignore errors
    reproject_and_fuse(sources,
                       output_data,
                       dst_transform=identity,
                       dst_projection=crs,
                       dst_nodata=no_data,
                       skip_broken_datasets=True)

    assert (output_data == [[2, 2], [2, 2]]).all()
Exemplo n.º 3
0
def _fuse_measurement(dest, datasets, geobox, measurement,
                      skip_broken_datasets=False,
                      fuse_func=None):
    reproject_and_fuse([new_datasource(dataset, measurement['name']) for dataset in datasets],
                       dest,
                       geobox.affine,
                       geobox.crs,
                       dest.dtype.type(measurement['nodata']),
                       resampling=measurement.get('resampling_method', 'nearest'),
                       fuse_func=fuse_func,
                       skip_broken_datasets=skip_broken_datasets)
Exemplo n.º 4
0
def test_mixed_result_when_first_source_partially_empty():
    crs = mock.MagicMock()
    shape = (2, 2)
    no_data = -1

    source1 = _mock_datasetsource([[1, 1], [no_data, no_data]], crs=crs, shape=shape)
    source2 = _mock_datasetsource([[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, dst_transform=identity, dst_projection=crs, dst_nodata=no_data)

    assert (output_data == [[1, 1], [2, 2]]).all()
Exemplo n.º 5
0
def test_second_source_used_when_first_is_empty():
    crs = mock.MagicMock()
    shape = (2, 2)
    no_data = -1

    source1 = _mock_datasetsource([[-1, -1], [-1, -1]], crs=crs, shape=shape)
    source2 = _mock_datasetsource([[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, dst_transform=identity, dst_projection=crs, dst_nodata=no_data)

    assert (output_data == 2).all()
Exemplo n.º 6
0
def test_first_source_is_priority_in_reproject_and_fuse():
    crs = geometry.CRS('EPSG:4326')
    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, dst_transform=identity, dst_projection=crs, dst_nodata=no_data)

    assert (output_data == 1).all()
Exemplo n.º 7
0
def test_mixed_result_when_first_source_partially_empty_with_nan_nodata():
    crs = geometry.CRS('EPSG:4326')
    shape = (2, 2)
    no_data = np.nan

    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='float64')
    reproject_and_fuse(sources, output_data, dst_transform=identity, dst_projection=crs, dst_nodata=no_data)

    assert (output_data == [[1, 1], [2, 2]]).all()
Exemplo n.º 8
0
def test_first_source_is_priority_in_reproject_and_fuse():
    crs = mock.MagicMock()
    shape = (2, 2)
    no_data = -1

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

    output_data = numpy.full(shape, fill_value=no_data, dtype='int16')
    reproject_and_fuse(sources,
                       output_data,
                       dst_transform=identity,
                       dst_projection=crs,
                       dst_nodata=no_data)

    assert (output_data == 1).all()