Skip to content

Commit bb2c366

Browse files
alexbruynyalldawson
authored andcommittedJan 21, 2019
[processing] add optional EXTRA parameter to gdalwarp algorithm (fix #20721)
This allows users to pass additional command-line arguments which are not exposed in the algorithm definition. The most frequent use case is enabling transparency and adding nodata values.
1 parent 1253707 commit bb2c366

File tree

2 files changed

+50
-0
lines changed

2 files changed

+50
-0
lines changed
 

‎python/plugins/processing/algs/gdal/warp.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
QgsProcessingParameterEnum,
3939
QgsProcessingParameterBoolean,
4040
QgsProcessingParameterExtent,
41+
QgsProcessingParameterString,
4142
QgsProcessingParameterRasterDestination,
4243
QgsProcessingUtils)
4344
from processing.algs.gdal.GdalAlgorithm import GdalAlgorithm
@@ -59,6 +60,7 @@ class warp(GdalAlgorithm):
5960
TARGET_EXTENT = 'TARGET_EXTENT'
6061
TARGET_EXTENT_CRS = 'TARGET_EXTENT_CRS'
6162
MULTITHREADING = 'MULTITHREADING'
63+
EXTRA = 'EXTRA'
6264
OUTPUT = 'OUTPUT'
6365

6466
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):
139141
multithreading_param.setFlags(multithreading_param.flags() | QgsProcessingParameterDefinition.FlagAdvanced)
140142
self.addParameter(multithreading_param)
141143

144+
extra_param = QgsProcessingParameterBoolean(self.EXTRA,
145+
self.tr('Additional command-line parameters'),
146+
defaultValue=None,
147+
optional=True)
148+
extra_param.setFlags(extra_param.flags() | QgsProcessingParameterDefinition.FlagAdvanced)
149+
self.addParameter(extra_param)
150+
142151
self.addParameter(QgsProcessingParameterRasterDestination(self.OUTPUT,
143152
self.tr('Reprojected')))
144153

@@ -228,6 +237,10 @@ def getConsoleCommands(self, parameters, context, feedback, executing=True):
228237
if options:
229238
arguments.extend(GdalUtils.parseCreationOptions(options))
230239

240+
if self.EXTRA in parameters and parameters[self.EXTRA] not in (None, ''):
241+
extra = self.parameterAsString(parameters, self.EXTRA, context)
242+
arguments.append(extra)
243+
231244
arguments.append(inLayer.source())
232245
arguments.append(out)
233246

‎python/plugins/processing/tests/GdalAlgorithmsTest.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2213,6 +2213,43 @@ def testWarp(self):
22132213
source + ' ' +
22142214
outdir + '/check.jpg'])
22152215

2216+
# with additional command-line parameter
2217+
self.assertEqual(
2218+
alg.getConsoleCommands({'INPUT': source,
2219+
'EXTRA': '-dstalpha',
2220+
'OUTPUT': outdir + '/check.jpg'}, context, feedback),
2221+
['gdalwarp',
2222+
'-t_srs EPSG:4326 -r near -of JPEG -dstalpha ' +
2223+
source + ' ' +
2224+
outdir + '/check.jpg'])
2225+
2226+
self.assertEqual(
2227+
alg.getConsoleCommands({'INPUT': source,
2228+
'EXTRA': '-dstalpha -srcnodata -9999',
2229+
'OUTPUT': outdir + '/check.jpg'}, context, feedback),
2230+
['gdalwarp',
2231+
'-t_srs EPSG:4326 -r near -of JPEG -dstalpha -srcnodata -9999 ' +
2232+
source + ' ' +
2233+
outdir + '/check.jpg'])
2234+
2235+
self.assertEqual(
2236+
alg.getConsoleCommands({'INPUT': source,
2237+
'EXTRA': '-dstalpha -srcnodata "-9999 -8888"',
2238+
'OUTPUT': outdir + '/check.jpg'}, context, feedback),
2239+
['gdalwarp',
2240+
'-t_srs EPSG:4326 -r near -of JPEG -dstalpha -srcnodata "-9999 -8888" ' +
2241+
source + ' ' +
2242+
outdir + '/check.jpg'])
2243+
2244+
self.assertEqual(
2245+
alg.getConsoleCommands({'INPUT': source,
2246+
'EXTRA': '',
2247+
'OUTPUT': outdir + '/check.jpg'}, context, feedback),
2248+
['gdalwarp',
2249+
'-t_srs EPSG:4326 -r near -of JPEG ' +
2250+
source + ' ' +
2251+
outdir + '/check.jpg'])
2252+
22162253
def testRearrangeBands(self):
22172254
context = QgsProcessingContext()
22182255
feedback = QgsProcessingFeedback()

0 commit comments

Comments
 (0)
Please sign in to comment.