def test_gdal_merge_optfile(self): datasets, written = [], [] init = np.zeros((2, 2), np.int16) path = os.path.join(os.getcwd(), "test_gdal_merge_optfile.tif") ImageIO.write_geotiff(init, path, self.projection, self.coordinates) ds_in = GDalDatasetWrapper.from_file(path) for i in range(1, 3, 1): img = np.ones((i*2, i*2), np.int16) * i ds_n = GDalDatasetWrapper(ds=ds_in.get_ds(), array=img) p_out = "test_gdal_merge_optfile_%s.tif" % i ImageIO.write_geotiff_existing(img, p_out, ds_in.get_ds()) self.assertTrue(os.path.exists(path)) datasets.append(ds_n) written.append(p_out) optfile = "test_gdal_merge_optfile.txt" with open(optfile, 'w') as file_handler: for item in written: file_handler.write("{}\n".format(item)) ds_merged = ImageTools.gdal_merge(*datasets, q=True, a_nodata=0) ds_optfile = ImageTools.gdal_merge(optfile=optfile, q=True, a_nodata=0) # Array of shape (4, 4): expected = np.array([[2, 2, 2, 2], [2, 2, 2, 2], [2, 2, 2, 2], [2, 2, 2, 2]], dtype=np.int16) FileSystem.remove_file(path) [FileSystem.remove_file(p) for p in written] FileSystem.remove_file(optfile) np.testing.assert_equal(expected.dtype, ds_merged.array.dtype) np.testing.assert_almost_equal(expected, ds_merged.array) self.assertEqual(ds_merged.nodata_value, 0) self.assertEqual(ds_merged.epsg, 32631) np.testing.assert_equal(expected.dtype, ds_optfile.array.dtype) np.testing.assert_almost_equal(expected, ds_optfile.array) self.assertEqual(ds_optfile.nodata_value, 0) self.assertEqual(ds_optfile.epsg, 32631)
def prepare_mnt(self): """ Prepare the eudem files. :return: Path to the full resolution DEM file.gsw :rtype: str """ # Find/Download EuDEM archives: eudem_files = self.get_raw_data() # Unzip the downloaded/found EuDEM zip files: unzipped = [] for arch in eudem_files: basename = os.path.splitext(os.path.basename(arch))[0] FileSystem.unzip(arch, self.wdir) fn_unzipped = FileSystem.find_single(pattern=basename + ".TIF$", path=self.wdir) unzipped.append(fn_unzipped) # Fusion of all EuDEM files ds_cropped = [] for fn in unzipped: ds = ImageTools.gdal_warp(fn, of="GTiff", ot="Int16", r="cubic", te=self.site.te_str, t_srs=self.site.epsg_str, tr=self.site.tr_str, multi=True) ds.array[ds.array < self.lowest_allowed_height] = -32767 ds_cropped.append(ds) eudem_full_res = os.path.join(self.wdir, "eudem_%sm.tif" % int(self.site.res_x)) ImageTools.gdal_merge(*ds_cropped, dst=eudem_full_res, n=-32767, a_nodata=0, q=True) return eudem_full_res
def test_merge_then_translate(self): datasets = [] init = np.zeros((2, 2), np.int16) path = os.path.join(os.getcwd(), "test_gdal_merge.tif") ImageIO.write_geotiff(init, path, self.projection, self.coordinates) ds_in = GDalDatasetWrapper.from_file(path) for i in range(1, 3, 1): img = np.ones((i*2, i*2), np.int16) * i ds_n = GDalDatasetWrapper(ds=ds_in.get_ds(), array=img) self.assertTrue(os.path.exists(path)) datasets.append(ds_n) ds_merged = ImageTools.gdal_merge(*datasets, dst="out.tif", separate=True, q=True, a_nodata=0) # Array of shape (4, 4, 2): expected = np.array([[[1, 2], [1, 2], [0, 2], [0, 2]], [[1, 2], [1, 2], [0, 2], [0, 2]], [[0, 2], [0, 2], [0, 2], [0, 2]], [[0, 2], [0, 2], [0, 2], [0, 2]]], dtype=np.int16) FileSystem.remove_file("out.tif") np.testing.assert_equal(expected.dtype, ds_merged.array.dtype) np.testing.assert_almost_equal(expected, ds_merged.array) self.assertEqual(ds_merged.nodata_value, 0) self.assertEqual(ds_merged.epsg, 32631) ds_translate = ImageTools.gdal_translate(ds_merged, a_nodata=0) FileSystem.remove_file(path) np.testing.assert_equal(expected.dtype, ds_translate.array.dtype) np.testing.assert_almost_equal(ds_translate.array, expected) self.assertEqual(ds_translate.nodata_value, 0) self.assertEqual(ds_translate.epsg, 32631)