mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-15 00:04:00 -04:00
allow additional parameters for gdal_calc
This commit is contained in:
parent
c0c16cdd31
commit
5b27b72191
@ -53,6 +53,7 @@ class gdalcalc(GdalAlgorithm):
|
||||
OUTPUT = 'OUTPUT'
|
||||
NO_DATA = 'NO_DATA'
|
||||
OPTIONS = 'OPTIONS'
|
||||
EXTRA = 'EXTRA'
|
||||
RTYPE = 'RTYPE'
|
||||
TYPE = ['Byte', 'Int16', 'UInt16', 'UInt32', 'Int32', 'Float32', 'Float64']
|
||||
|
||||
@ -154,6 +155,13 @@ class gdalcalc(GdalAlgorithm):
|
||||
'class': 'processing.algs.gdal.ui.RasterOptionsWidget.RasterOptionsWidgetWrapper'}})
|
||||
self.addParameter(options_param)
|
||||
|
||||
extra_param = QgsProcessingParameterString(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,
|
||||
@ -249,6 +257,10 @@ class gdalcalc(GdalAlgorithm):
|
||||
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('--outfile')
|
||||
arguments.append(out)
|
||||
|
||||
|
@ -1024,46 +1024,44 @@ class TestGdalAlgorithms(unittest.TestCase, AlgorithmsTestBase.AlgorithmsTest):
|
||||
# default execution
|
||||
formula = 'A*2' # default formula
|
||||
self.assertEqual(
|
||||
alg.getConsoleCommands({
|
||||
'INPUT_A': source,
|
||||
'BAND_A': 1,
|
||||
'FORMULA': formula,
|
||||
'BAND_D': -1,
|
||||
'NO_DATA': None,
|
||||
'BAND_F': -1,
|
||||
'BAND_B': -1,
|
||||
'RTYPE': 5,
|
||||
'INPUT_F': None,
|
||||
'BAND_E': -1,
|
||||
'INPUT_D': None,
|
||||
'INPUT_B': None,
|
||||
'BAND_C': -1,
|
||||
'INPUT_E': None,
|
||||
'INPUT_C': None,
|
||||
'OUTPUT': output}, context, feedback),
|
||||
['gdal_calc' if isWindows() else 'gdal_calc.py', '--calc "{}" --format JPEG --type Float32 -A {} --A_band 1 --outfile {}'.format(formula, source, output)])
|
||||
alg.getConsoleCommands({'INPUT_A': source,
|
||||
'BAND_A': 1,
|
||||
'FORMULA': formula,
|
||||
'OUTPUT': output}, context, feedback),
|
||||
['gdal_calc' if isWindows() else 'gdal_calc.py',
|
||||
'--calc "{}" --format JPEG --type Float32 -A {} --A_band 1 --outfile {}'.format(formula, source, output)])
|
||||
|
||||
# check that formula is not escaped and formula is returned as it is
|
||||
formula = 'A * 2' # <--- add spaces in the formula
|
||||
self.assertEqual(
|
||||
alg.getConsoleCommands({
|
||||
'INPUT_A': source,
|
||||
'BAND_A': 1,
|
||||
'FORMULA': formula,
|
||||
'BAND_D': -1,
|
||||
'NO_DATA': None,
|
||||
'BAND_F': -1,
|
||||
'BAND_B': -1,
|
||||
'RTYPE': 5,
|
||||
'INPUT_F': None,
|
||||
'BAND_E': -1,
|
||||
'INPUT_D': None,
|
||||
'INPUT_B': None,
|
||||
'BAND_C': -1,
|
||||
'INPUT_E': None,
|
||||
'INPUT_C': None,
|
||||
'OUTPUT': output}, context, feedback),
|
||||
['gdal_calc' if isWindows() else 'gdal_calc.py', '--calc "{}" --format JPEG --type Float32 -A {} --A_band 1 --outfile {}'.format(formula, source, output)])
|
||||
alg.getConsoleCommands({'INPUT_A': source,
|
||||
'BAND_A': 1,
|
||||
'FORMULA': formula,
|
||||
'OUTPUT': output}, context, feedback),
|
||||
['gdal_calc' if isWindows() else 'gdal_calc.py',
|
||||
'--calc "{}" --format JPEG --type Float32 -A {} --A_band 1 --outfile {}'.format(formula, source, output)])
|
||||
|
||||
# additional creation options
|
||||
formula = 'A*2'
|
||||
self.assertEqual(
|
||||
alg.getConsoleCommands({'INPUT_A': source,
|
||||
'BAND_A': 1,
|
||||
'FORMULA': formula,
|
||||
'OPTIONS': 'COMPRESS=JPEG|JPEG_QUALITY=75',
|
||||
'OUTPUT': output}, context, feedback),
|
||||
['gdal_calc' if isWindows() else 'gdal_calc.py',
|
||||
'--calc "{}" --format JPEG --type Float32 -A {} --A_band 1 -co COMPRESS=JPEG -co JPEG_QUALITY=75 --outfile {}'.format(formula, source, output)])
|
||||
|
||||
# additional parameters
|
||||
formula = 'A*2'
|
||||
self.assertEqual(
|
||||
alg.getConsoleCommands({'INPUT_A': source,
|
||||
'BAND_A': 1,
|
||||
'FORMULA': formula,
|
||||
'EXTRA': '--debug --quiet',
|
||||
'OUTPUT': output}, context, feedback),
|
||||
['gdal_calc' if isWindows() else 'gdal_calc.py',
|
||||
'--calc "{}" --format JPEG --type Float32 -A {} --A_band 1 --debug --quiet --outfile {}'.format(formula, source, output)])
|
||||
|
||||
def testBuildVrt(self):
|
||||
context = QgsProcessingContext()
|
||||
|
Loading…
x
Reference in New Issue
Block a user