From 7048868f280f103d44727d4a15dad9e7e22ff5a0 Mon Sep 17 00:00:00 2001 From: Piero Toffanin Date: Tue, 5 Dec 2023 14:01:15 -0500 Subject: [PATCH] Improved DEM generation efficiency --- opendm/dem/commands.py | 15 ++++++++++++--- stages/odm_dem.py | 7 ------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/opendm/dem/commands.py b/opendm/dem/commands.py index aa126a16..89913f6b 100755 --- a/opendm/dem/commands.py +++ b/opendm/dem/commands.py @@ -123,7 +123,6 @@ def create_dem(input_point_cloud, dem_type, output_type='max', radiuses=['0.56'] run('gdalbuildvrt -input_file_list "%s" "%s" ' % (tiles_file_list, tiles_vrt_path)) merged_vrt_path = os.path.abspath(os.path.join(outdir, "merged.vrt")) - # geotiff_tmp_path = os.path.abspath(os.path.join(outdir, 'tiles.tmp.tif')) geotiff_small_path = os.path.abspath(os.path.join(outdir, 'tiles.small.tif')) geotiff_small_filled_path = os.path.abspath(os.path.join(outdir, 'tiles.small_filled.tif')) geotiff_path = os.path.abspath(os.path.join(outdir, 'tiles.tif')) @@ -147,6 +146,7 @@ def create_dem(input_point_cloud, dem_type, output_type='max', radiuses=['0.56'] run('gdal_translate ' '-co NUM_THREADS={threads} ' '-co BIGTIFF=IF_SAFER ' + '-co COMPRESS=DEFLATE ' '--config GDAL_CACHEMAX {max_memory}% ' '-outsize 10% 0 ' '"{tiles_vrt}" "{geotiff_small}"'.format(**kwargs)) @@ -155,6 +155,7 @@ def create_dem(input_point_cloud, dem_type, output_type='max', radiuses=['0.56'] gdal_fillnodata(['.', '-co', 'NUM_THREADS=%s' % kwargs['threads'], '-co', 'BIGTIFF=IF_SAFER', + '-co', 'COMPRESS=DEFLATE', '--config', 'GDAL_CACHE_MAX', str(kwargs['max_memory']) + '%', '-b', '1', '-of', 'GTiff', @@ -207,12 +208,20 @@ def compute_euclidean_map(geotiff_path, output_path, overwrite=False): with rasterio.open(geotiff_path) as f: nodata = f.nodatavals[0] - if not os.path.exists(output_path) or overwrite: + if not os.path.isfile(output_path) or overwrite: + if os.path.isfile(output_path): + os.remove(output_path) + log.ODM_INFO("Computing euclidean distance: %s" % output_path) if gdal_proximity is not None: try: - gdal_proximity(['gdal_proximity.py', geotiff_path, output_path, '-values', str(nodata)]) + gdal_proximity(['gdal_proximity.py', + geotiff_path, output_path, '-values', str(nodata), + '-co', 'TILED=YES', + '-co', 'BIGTIFF=IF_SAFER', + '-co', 'COMPRESS=DEFLATE', + ]) except Exception as e: log.ODM_WARNING("Cannot compute euclidean distance: %s" % str(e)) diff --git a/stages/odm_dem.py b/stages/odm_dem.py index 3d2c433e..1146879a 100755 --- a/stages/odm_dem.py +++ b/stages/odm_dem.py @@ -111,13 +111,6 @@ class ODMDEMStage(types.ODM_Stage): # Crop DEM Cropper.crop(bounds_file_path, dem_geotiff_path, utils.get_dem_vars(args), keep_original=not args.optimize_disk_space) - if args.dem_euclidean_map: - emap_path = io.related_file_path(dem_geotiff_path, postfix=".euclideand") - - # Crop euclidean map - Cropper.crop(bounds_file_path, emap_path, utils.get_dem_vars(args), keep_original=not args.optimize_disk_space) - - if pseudo_georeference: pseudogeo.add_pseudo_georeferencing(dem_geotiff_path)