diff --git a/python/plugins/processing/algs/gdal/warp.py b/python/plugins/processing/algs/gdal/warp.py index d5dea6927ce3..aad1963f1c03 100644 --- a/python/plugins/processing/algs/gdal/warp.py +++ b/python/plugins/processing/algs/gdal/warp.py @@ -38,6 +38,7 @@ QgsProcessingParameterEnum, QgsProcessingParameterBoolean, QgsProcessingParameterExtent, + QgsProcessingParameterString, QgsProcessingParameterRasterDestination, QgsProcessingUtils) from processing.algs.gdal.GdalAlgorithm import GdalAlgorithm @@ -59,6 +60,7 @@ class warp(GdalAlgorithm): TARGET_EXTENT = 'TARGET_EXTENT' TARGET_EXTENT_CRS = 'TARGET_EXTENT_CRS' MULTITHREADING = 'MULTITHREADING' + EXTRA = 'EXTRA' OUTPUT = 'OUTPUT' TYPES = ['Use input layer data type', 'Byte', 'Int16', 'UInt16', 'UInt32', 'Int32', 'Float32', 'Float64', 'CInt16', 'CInt32', 'CFloat32', 'CFloat64'] @@ -139,6 +141,13 @@ def initAlgorithm(self, config=None): multithreading_param.setFlags(multithreading_param.flags() | QgsProcessingParameterDefinition.FlagAdvanced) self.addParameter(multithreading_param) + extra_param = QgsProcessingParameterBoolean(self.EXTRA, + self.tr('Additional command-line parameters'), + defaultValue=None, + optional=True) + extra_param.setFlags(extra_param.flags() | QgsProcessingParameterDefinition.FlagAdvanced) + self.addParameter(extra_param) + self.addParameter(QgsProcessingParameterRasterDestination(self.OUTPUT, self.tr('Reprojected'))) @@ -228,6 +237,10 @@ def getConsoleCommands(self, parameters, context, feedback, executing=True): if options: arguments.extend(GdalUtils.parseCreationOptions(options)) + if self.EXTRA in parameters and parameters[self.EXTRA] not in (None, ''): + extra = self.parameterAsString(parameters, self.EXTRA, context) + arguments.append(extra) + arguments.append(inLayer.source()) arguments.append(out) diff --git a/python/plugins/processing/tests/GdalAlgorithmsTest.py b/python/plugins/processing/tests/GdalAlgorithmsTest.py index 512f59702e09..818635b003fe 100644 --- a/python/plugins/processing/tests/GdalAlgorithmsTest.py +++ b/python/plugins/processing/tests/GdalAlgorithmsTest.py @@ -2213,6 +2213,43 @@ def testWarp(self): source + ' ' + outdir + '/check.jpg']) + # with additional command-line parameter + self.assertEqual( + alg.getConsoleCommands({'INPUT': source, + 'EXTRA': '-dstalpha', + 'OUTPUT': outdir + '/check.jpg'}, context, feedback), + ['gdalwarp', + '-t_srs EPSG:4326 -r near -of JPEG -dstalpha ' + + source + ' ' + + outdir + '/check.jpg']) + + self.assertEqual( + alg.getConsoleCommands({'INPUT': source, + 'EXTRA': '-dstalpha -srcnodata -9999', + 'OUTPUT': outdir + '/check.jpg'}, context, feedback), + ['gdalwarp', + '-t_srs EPSG:4326 -r near -of JPEG -dstalpha -srcnodata -9999 ' + + source + ' ' + + outdir + '/check.jpg']) + + self.assertEqual( + alg.getConsoleCommands({'INPUT': source, + 'EXTRA': '-dstalpha -srcnodata "-9999 -8888"', + 'OUTPUT': outdir + '/check.jpg'}, context, feedback), + ['gdalwarp', + '-t_srs EPSG:4326 -r near -of JPEG -dstalpha -srcnodata "-9999 -8888" ' + + source + ' ' + + outdir + '/check.jpg']) + + self.assertEqual( + alg.getConsoleCommands({'INPUT': source, + 'EXTRA': '', + 'OUTPUT': outdir + '/check.jpg'}, context, feedback), + ['gdalwarp', + '-t_srs EPSG:4326 -r near -of JPEG ' + + source + ' ' + + outdir + '/check.jpg']) + def testRearrangeBands(self): context = QgsProcessingContext() feedback = QgsProcessingFeedback()