From 4c60de5bed895b81c913447f57316bb88514d50b Mon Sep 17 00:00:00 2001 From: Dakota Benjamin Date: Wed, 29 Mar 2017 16:13:34 -0400 Subject: [PATCH 1/3] Add BigTIFF creation option to odm_orthophoto Former-commit-id: 3ce495c37bead42005bd92e92ee3f6dfc01c3827 --- opendm/config.py | 5 +++++ scripts/odm_app.py | 1 + scripts/odm_orthophoto.py | 4 +++- 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/opendm/config.py b/opendm/config.py index 19321582..bacb8dcd 100644 --- a/opendm/config.py +++ b/opendm/config.py @@ -344,6 +344,11 @@ def config(): 'break gdal_translate if you don\'t know what you ' 'are doing. Options: %(choices)s.\nDefault: %(default)s') + parser.add_argument('--orthophoto-bigtiff', + action='store_true', + default=False, + help='Set this parameter if you expect a big orthophoto.') + parser.add_argument('--zip-results', action='store_true', default=False, diff --git a/scripts/odm_app.py b/scripts/odm_app.py index cc3729a1..63c5baa2 100644 --- a/scripts/odm_app.py +++ b/scripts/odm_app.py @@ -76,6 +76,7 @@ class ODMApp(ecto.BlackBox): t_srs=p.args.orthophoto_target_srs, no_tiled=p.args.orthophoto_no_tiled, compress=p.args.orthophoto_compression, + bigtiff=p.args.orthophoto_bigtiff, verbose=p.args.verbose) } diff --git a/scripts/odm_orthophoto.py b/scripts/odm_orthophoto.py index 52e688db..931b3467 100644 --- a/scripts/odm_orthophoto.py +++ b/scripts/odm_orthophoto.py @@ -13,6 +13,7 @@ class ODMOrthoPhotoCell(ecto.Cell): params.declare("t_srs", 'Target SRS', None) params.declare("no_tiled", 'Do not tile tiff', False) params.declare("compress", 'Compression type', 'DEFLATE') + params.declare("bigtiff", 'Make BigTIFF orthophoto', False) params.declare("verbose", 'print additional messages to console', False) def declare_io(self, params, inputs, outputs): @@ -102,13 +103,14 @@ class ODMOrthoPhotoCell(ecto.Cell): ['LZW', 'DEFLATE'] else '', 'epsg': georef.epsg, 't_srs': self.params.t_srs or "EPSG:{0}".format(georef.epsg), + 'bigtiff': '-co BIGTIFF=YES ' if self.params.bigtiff else '', 'png': tree.odm_orthophoto_file, 'tiff': tree.odm_orthophoto_tif, 'log': tree.odm_orthophoto_tif_log } system.run('gdal_translate -a_ullr {ulx} {uly} {lrx} {lry} ' - '{tiled} ' + '{tiled} {bigtiff} ' '-co COMPRESS={compress} ' '{predictor} ' '-co BLOCKXSIZE=512 ' From 9a79f8ea0b439f137995d26fe01047b8f8855650 Mon Sep 17 00:00:00 2001 From: Dakota Benjamin Date: Fri, 31 Mar 2017 10:52:46 -0400 Subject: [PATCH 2/3] Add all options to BIGTIFF param Former-commit-id: ab72aeafe30b86e77204e38cc0617efe5bde42cb --- opendm/config.py | 11 ++++++++--- scripts/odm_orthophoto.py | 7 ++++--- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/opendm/config.py b/opendm/config.py index bacb8dcd..7dcd3697 100644 --- a/opendm/config.py +++ b/opendm/config.py @@ -345,9 +345,14 @@ def config(): 'are doing. Options: %(choices)s.\nDefault: %(default)s') parser.add_argument('--orthophoto-bigtiff', - action='store_true', - default=False, - help='Set this parameter if you expect a big orthophoto.') + type=str, + choices=['YES', 'NO','IF_NEEDED','IF_SAFER'], + default='IF_SAFER', + help='Control whether the created orthophoto is a BigTIFF or ' + 'classic TIFF. BigTIFF is a variant for files larger than ' + '4GiB of data. Options are %(choices)s. See GDAL specs: ' + 'https://www.gdal.org/frmt_gtiff.html for more info. ' + '\nDefault: %(default)s') parser.add_argument('--zip-results', action='store_true', diff --git a/scripts/odm_orthophoto.py b/scripts/odm_orthophoto.py index 931b3467..e16979f6 100644 --- a/scripts/odm_orthophoto.py +++ b/scripts/odm_orthophoto.py @@ -13,7 +13,7 @@ class ODMOrthoPhotoCell(ecto.Cell): params.declare("t_srs", 'Target SRS', None) params.declare("no_tiled", 'Do not tile tiff', False) params.declare("compress", 'Compression type', 'DEFLATE') - params.declare("bigtiff", 'Make BigTIFF orthophoto', False) + params.declare("bigtiff", 'Make BigTIFF orthophoto', 'IF_SAFER') params.declare("verbose", 'print additional messages to console', False) def declare_io(self, params, inputs, outputs): @@ -103,14 +103,15 @@ class ODMOrthoPhotoCell(ecto.Cell): ['LZW', 'DEFLATE'] else '', 'epsg': georef.epsg, 't_srs': self.params.t_srs or "EPSG:{0}".format(georef.epsg), - 'bigtiff': '-co BIGTIFF=YES ' if self.params.bigtiff else '', + 'bigtiff': self.params.bigtiff, 'png': tree.odm_orthophoto_file, 'tiff': tree.odm_orthophoto_tif, 'log': tree.odm_orthophoto_tif_log } system.run('gdal_translate -a_ullr {ulx} {uly} {lrx} {lry} ' - '{tiled} {bigtiff} ' + '{tiled} ' + '-co BIGTIFF={bigtiff} ' '-co COMPRESS={compress} ' '{predictor} ' '-co BLOCKXSIZE=512 ' From c96b4b259eb784586f8d96ef48e71dd65e80fec9 Mon Sep 17 00:00:00 2001 From: Dakota Benjamin Date: Fri, 31 Mar 2017 14:53:47 -0400 Subject: [PATCH 3/3] Add gdaladdo to build overviews Former-commit-id: c79c4646df45f25c3856bcb9c53e5bc6c2cceda2 --- opendm/config.py | 5 +++++ opendm/types.py | 1 + scripts/odm_app.py | 1 + scripts/odm_orthophoto.py | 14 ++++++++++++++ 4 files changed, 21 insertions(+) diff --git a/opendm/config.py b/opendm/config.py index 7dcd3697..07c2c209 100644 --- a/opendm/config.py +++ b/opendm/config.py @@ -354,6 +354,11 @@ def config(): 'https://www.gdal.org/frmt_gtiff.html for more info. ' '\nDefault: %(default)s') + parser.add_argument('--build-overviews', + action='store_true', + default=False, + help='Build orthophoto overviews using gdaladdo.') + parser.add_argument('--zip-results', action='store_true', default=False, diff --git a/opendm/types.py b/opendm/types.py index 3a411c34..4a5ef05a 100644 --- a/opendm/types.py +++ b/opendm/types.py @@ -421,3 +421,4 @@ class ODM_Tree(object): self.odm_orthophoto_corners = io.join_paths(self.odm_orthophoto, 'odm_orthophoto_corners.txt') self.odm_orthophoto_log = io.join_paths(self.odm_orthophoto, 'odm_orthophoto_log.txt') self.odm_orthophoto_tif_log = io.join_paths(self.odm_orthophoto, 'gdal_translate_log.txt') + self.odm_orthophoto_gdaladdo_log = io.join_paths(self.odm_orthophoto, 'gdaladdo_log.txt') diff --git a/scripts/odm_app.py b/scripts/odm_app.py index 63c5baa2..41ae72ec 100644 --- a/scripts/odm_app.py +++ b/scripts/odm_app.py @@ -77,6 +77,7 @@ class ODMApp(ecto.BlackBox): no_tiled=p.args.orthophoto_no_tiled, compress=p.args.orthophoto_compression, bigtiff=p.args.orthophoto_bigtiff, + build_overviews=p.args.build_overviews, verbose=p.args.verbose) } diff --git a/scripts/odm_orthophoto.py b/scripts/odm_orthophoto.py index e16979f6..60d28eae 100644 --- a/scripts/odm_orthophoto.py +++ b/scripts/odm_orthophoto.py @@ -14,6 +14,7 @@ class ODMOrthoPhotoCell(ecto.Cell): params.declare("no_tiled", 'Do not tile tiff', False) params.declare("compress", 'Compression type', 'DEFLATE') params.declare("bigtiff", 'Make BigTIFF orthophoto', 'IF_SAFER') + params.declare("build_overviews", 'Build overviews', False) params.declare("verbose", 'print additional messages to console', False) def declare_io(self, params, inputs, outputs): @@ -119,6 +120,19 @@ class ODMOrthoPhotoCell(ecto.Cell): '-co NUM_THREADS=ALL_CPUS ' '-a_srs \"EPSG:{epsg}\" ' '{png} {tiff} > {log}'.format(**kwargs)) + + if self.params.build_overviews: + log.ODM_DEBUG("Building Overviews") + kwargs = { + 'orthophoto': tree.odm_orthophoto_tif, + 'log': tree.odm_orthophoto_gdaladdo_log + } + # Run gdaladdo + system.run('gdaladdo -ro -r average ' + '--config BIGTIFF_OVERVIEW IF_SAFER ' + '--config COMPRESS_OVERVIEW JPEG ' + '{orthophoto} 2 4 8 16 > {log}'.format(**kwargs)) + geotiffcreated = True if not geotiffcreated: log.ODM_WARNING('No geo-referenced orthophoto created due '