def test_clip_unequal_timedelta(source, empty_source): # clip checks for matching timedeltas; test that here # NB: note that `source` is temporal and `empty_source` is not with pytest.raises(ValueError, match=".*resolution of the clipping.*"): raster.Clip(source, empty_source) with pytest.raises(ValueError, match=".*resolution of the clipping.*"): raster.Clip(empty_source, source)
def test_clip_attrs_with_reprojection(source, empty_source): # create a raster in WGS84 that contains the store clipping_mask = MemorySource( data=source.data, no_data_value=source.no_data_value, projection="EPSG:4326", pixel_size=1, pixel_origin=(4, 54), time_first=source.time_first, time_delta=source.time_delta, ) clip = raster.Clip(source, clipping_mask) assert clip.extent == source.extent assert clip.geometry.GetEnvelope() == source.geometry.GetEnvelope()
def test_clip_attrs_no_intersection(source): # create a raster in that does not overlap the store clipping_mask = MemorySource( data=source.data, no_data_value=source.no_data_value, projection="EPSG:28992", pixel_size=source.pixel_size, pixel_origin=[o + 5 for o in source.pixel_origin], time_first=source.time_first, time_delta=source.time_delta, ) clip = raster.Clip(source, clipping_mask) assert clip.extent is None assert clip.geometry is None
def test_clip_partial_temporal_overlap(source, vals_request): # create a clipping mask in that temporally does not overlap the store clipping_mask = MemorySource( data=source.data, no_data_value=source.no_data_value, projection=source.projection, pixel_size=source.pixel_size, pixel_origin=source.pixel_origin, time_first=source.time_first + source.time_delta, time_delta=source.time_delta, ) clip = raster.Clip(source, clipping_mask) assert clip.period == (clipping_mask.period[0], source.period[1]) assert clip.get_data(**vals_request)["values"][:, 0, 0].tolist() == [7, 255]
def test_clip_no_temporal_overlap(source, vals_request): # create a clipping mask in that temporally does not overlap the store clipping_mask = MemorySource( data=source.data, no_data_value=source.no_data_value, projection=source.projection, pixel_size=source.pixel_size, pixel_origin=source.pixel_origin, time_first=source.time_first + 10 * source.time_delta, time_delta=source.time_delta, ) clip = raster.Clip(source, clipping_mask) assert clip.period is None assert clip.get_data(**vals_request) is None
def test_clip_attrs_intersects(source, empty_source): # create a raster in that only partially overlaps the store clipping_mask = MemorySource( data=source.data, no_data_value=source.no_data_value, projection="EPSG:28992", pixel_size=source.pixel_size, pixel_origin=[o + 3 for o in source.pixel_origin], time_first=source.time_first, time_delta=source.time_delta, ) clip = raster.Clip(source, clipping_mask) expected_extent = ( clipping_mask.extent[0], clipping_mask.extent[1], source.extent[2], source.extent[3], ) expected_geometry = source.geometry.Intersection(clipping_mask.geometry) assert clip.extent == expected_extent assert clip.geometry.ExportToWkt() == expected_geometry.ExportToWkt()
def test_clip_empty_source(source, empty_source, vals_request): clip = raster.Clip(empty_source, raster.Snap(source, empty_source)) assert clip.get_data(**vals_request) is None
def test_clip_matching_timedelta(source): clip = raster.Clip(source, source == 7) assert clip.timedelta == source.timedelta
def test_clip_attrs_mask_empty(source, empty_source): # clip should propagate the (empty) extent of the clipping mask clip = raster.Clip(source, raster.Snap(empty_source, source)) assert clip.extent is None assert clip.geometry is None
def test_clip_meta_request(source, vals_request, expected_meta): clip = raster.Clip(source, source) vals_request["mode"] = "meta" assert clip.get_data(**vals_request)["meta"] == expected_meta
def test_clip_time_request(source, vals_request, expected_time): clip = raster.Clip(source, source) vals_request["mode"] = "time" assert clip.get_data(**vals_request)["time"] == expected_time
def test_clip_with_bool(source, vals_request): clip = raster.Clip(source, source == 7) assert_equal(clip.get_data(**vals_request)["values"][:, 0, 0], [255, 7, 255])
def test_clip_with_data(source, nodata_source, vals_request): # the clipping mask has data everywhere (nothing will be masked) clip = raster.Clip(source, source) assert_equal(clip.get_data(**vals_request)["values"][:, 0, 0], [1, 7, 255])
def test_clip_with_nodata(source, nodata_source, vals_request): # the clipping mask has nodata everywhere (everything will be masked) clip = raster.Clip(source, nodata_source) assert_equal(clip.get_data(**vals_request)["values"], 255)
def test_clip_with_empty_mask(source, empty_source, vals_request): clip = raster.Clip(source, empty_source) assert clip.get_data(**vals_request) is None
def test_clip_attrs_store_empty(source, empty_source): # clip should propagate the (empty) extent of the store clip = raster.Clip(empty_source, source) assert clip.extent is None assert clip.geometry is None