def test_compute_reproject_roi(): src = AlbersGS.tile_geobox((15, -40)) dst = geometry.GeoBox.from_geopolygon( src.extent.to_crs(epsg3857).buffer(10), resolution=src.resolution) rr = compute_reproject_roi(src, dst) assert rr.roi_src == np.s_[0:src.height, 0:src.width] assert 0 < rr.scale < 1 assert rr.is_st is False assert rr.transform.linear is None assert rr.scale in rr.scale2 # check pure translation case roi_ = np.s_[113:-100, 33:-10] rr = compute_reproject_roi(src, src[roi_]) assert rr.roi_src == roi_normalise(roi_, src.shape) assert rr.scale == 1 assert rr.is_st is True rr = compute_reproject_roi(src, src[roi_], padding=0, align=0) assert rr.roi_src == roi_normalise(roi_, src.shape) assert rr.scale == 1 assert rr.scale2 == (1, 1) # check pure translation case roi_ = np.s_[113:-100, 33:-10] rr = compute_reproject_roi(src, src[roi_], align=256) assert rr.roi_src == np.s_[0:src.height, 0:src.width] assert rr.scale == 1 roi_ = np.s_[113:-100, 33:-10] rr = compute_reproject_roi(src, src[roi_]) assert rr.scale == 1 assert roi_shape(rr.roi_src) == roi_shape(rr.roi_dst) assert roi_shape(rr.roi_dst) == src[roi_].shape
def test_roi_tools(): from datacube.utils.geometry import ( roi_is_empty, roi_is_full, roi_shape, roi_normalise, roi_boundary, roi_from_points, roi_center, roi_pad, roi_intersect, scaled_down_roi, scaled_up_roi, scaled_down_shape, ) from numpy import s_ assert roi_shape(s_[2:4, 3:4]) == (2, 1) assert roi_shape(s_[:4, :7]) == (4, 7) assert roi_is_empty(s_[:4, :5]) is False assert roi_is_empty(s_[1:1, :10]) is True assert roi_is_empty(s_[7:3, :10]) is True assert roi_is_empty(s_[:3]) is False assert roi_is_empty(s_[4:4]) is True assert roi_is_full(s_[:3], 3) is True assert roi_is_full(s_[:3, 0:4], (3, 4)) is True assert roi_is_full(s_[:, 0:4], (33, 4)) is True assert roi_is_full(s_[1:3, 0:4], (3, 4)) is False assert roi_is_full(s_[1:3, 0:4], (2, 4)) is False assert roi_is_full(s_[0:4, 0:4], (3, 4)) is False roi = s_[0:8, 0:4] roi_ = scaled_down_roi(roi, 2) assert roi_shape(roi_) == (4, 2) assert scaled_down_roi(scaled_up_roi(roi, 3), 3) == roi assert scaled_down_shape(roi_shape(roi), 2) == roi_shape(scaled_down_roi(roi, 2)) assert roi_shape(scaled_up_roi(roi, 10000, (40, 50))) == (40, 50) assert roi_normalise(s_[3:4], 40) == s_[3:4] assert roi_normalise(s_[:4], (40, )) == s_[0:4] assert roi_normalise(s_[:], (40, )) == s_[0:40] assert roi_normalise(s_[:-1], (3, )) == s_[0:2] assert roi_normalise(s_[-2:-1, :], (10, 20)) == s_[8:9, 0:20] assert roi_normalise(s_[-2:-1, :, 3:4], (10, 20, 100)) == s_[8:9, 0:20, 3:4] assert roi_center(s_[0:3]) == 1.5 assert roi_center(s_[0:2, 0:6]) == (1, 3) roi = s_[0:2, 4:13] xy = roi_boundary(roi) assert xy.shape == (4, 2) assert roi_from_points(xy, (2, 13)) == roi assert roi_intersect(roi, roi) == roi assert roi_intersect(s_[0:3], s_[1:7]) == s_[1:3] assert roi_intersect(s_[0:3], (s_[1:7], )) == s_[1:3] assert roi_intersect((s_[0:3], ), s_[1:7]) == (s_[1:3], ) assert roi_intersect(s_[4:7, 5:6], s_[0:1, 7:8]) == s_[4:4, 6:6] assert roi_pad(s_[0:4], 1, 4) == s_[0:4] assert roi_pad(s_[0:4, 1:5], 1, (4, 6)) == s_[0:4, 0:6] assert roi_pad(s_[2:3, 1:5], 10, (7, 9)) == s_[0:7, 0:9]