def test_geobox_scale_down(): from datacube.utils.geometry import GeoBox, CRS crs = CRS('EPSG:3857') A = mkA(0, (111.2, 111.2), translation=(125671, 251465)) for s in [2, 3, 4, 8, 13, 16]: gbox = GeoBox(233 * s, 755 * s, A, crs) gbox_ = scaled_down_geobox(gbox, s) assert gbox_.width == 233 assert gbox_.height == 755 assert gbox_.crs is crs assert gbox_.extent.contains(gbox.extent) assert gbox.extent.difference(gbox.extent).area == 0.0 gbox = GeoBox(1, 1, A, crs) for s in [2, 3, 5]: gbox_ = scaled_down_geobox(gbox, 3) assert gbox_.shape == (1, 1) assert gbox_.crs is crs assert gbox_.extent.contains(gbox.extent)
def test_pix_transform(): pt = tuple([ int(x / 10) * 10 for x in geometry.point(145, -35, epsg4326).to_crs(epsg3577).coords[0] ]) A = mkA(scale=(20, -20), translation=pt) src = geometry.GeoBox(1024, 512, A, epsg3577) dst = geometry.GeoBox.from_geopolygon(src.geographic_extent, (0.0001, -0.0001)) tr = native_pix_transform(src, dst) pts_src = [(0, 0), (10, 20), (300, 200)] pts_dst = tr(pts_src) pts_src_ = tr.back(pts_dst) np.testing.assert_almost_equal(pts_src, pts_src_) assert tr.linear is None # check identity transform tr = native_pix_transform(src, src) pts_src = [(0, 0), (10, 20), (300, 200)] pts_dst = tr(pts_src) pts_src_ = tr.back(pts_dst) np.testing.assert_almost_equal(pts_src, pts_src_) np.testing.assert_almost_equal(pts_src, pts_dst) assert tr.linear is not None assert tr.back.linear is not None assert tr.back.back is tr # check scale only change tr = native_pix_transform(src, scaled_down_geobox(src, 2)) pts_dst = tr(pts_src) pts_src_ = tr.back(pts_dst) assert tr.linear is not None assert tr.back.linear is not None assert tr.back.back is tr np.testing.assert_almost_equal(pts_dst, [(x / 2, y / 2) for (x, y) in pts_src]) np.testing.assert_almost_equal(pts_src, pts_src_)