Skip to content

Commit 629afb6

Browse files
committedJun 25, 2019
cover gdal merge algorithm with test and add support for additional
command line parameters
1 parent 97806ea commit 629afb6

File tree

2 files changed

+68
-0
lines changed

2 files changed

+68
-0
lines changed
 

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ class merge(GdalAlgorithm):
4848
PCT = 'PCT'
4949
SEPARATE = 'SEPARATE'
5050
OPTIONS = 'OPTIONS'
51+
EXTRA = 'EXTRA'
5152
DATA_TYPE = 'DATA_TYPE'
5253
NODATA_INPUT = 'NODATA_INPUT'
5354
NODATA_OUTPUT = 'NODATA_OUTPUT'
@@ -95,6 +96,13 @@ def initAlgorithm(self, config=None):
9596
'class': 'processing.algs.gdal.ui.RasterOptionsWidget.RasterOptionsWidgetWrapper'}})
9697
self.addParameter(options_param)
9798

99+
extra_param = QgsProcessingParameterString(self.EXTRA,
100+
self.tr('Additional command-line parameters'),
101+
defaultValue=None,
102+
optional=True)
103+
extra_param.setFlags(extra_param.flags() | QgsProcessingParameterDefinition.FlagAdvanced)
104+
self.addParameter(extra_param)
105+
98106
self.addParameter(QgsProcessingParameterEnum(self.DATA_TYPE,
99107
self.tr('Output data type'),
100108
self.TYPES,
@@ -153,6 +161,10 @@ def getConsoleCommands(self, parameters, context, feedback, executing=True):
153161
if options:
154162
arguments.extend(GdalUtils.parseCreationOptions(options))
155163

164+
if self.EXTRA in parameters and parameters[self.EXTRA] not in (None, ''):
165+
extra = self.parameterAsString(parameters, self.EXTRA, context)
166+
arguments.append(extra)
167+
156168
arguments.append('-o')
157169
arguments.append(out)
158170

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

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@
6262
from processing.algs.gdal.gdal2xyz import gdal2xyz
6363
from processing.algs.gdal.polygonize import polygonize
6464
from processing.algs.gdal.pansharp import pansharp
65+
from processing.algs.gdal.merge import merge
6566

6667
from processing.tools.system import isWindows
6768

@@ -2680,6 +2681,61 @@ def testWarp(self):
26802681
source + ' ' +
26812682
outdir + '/check.jpg'])
26822683

2684+
def testMerge(self):
2685+
context = QgsProcessingContext()
2686+
feedback = QgsProcessingFeedback()
2687+
source = [os.path.join(testDataPath, 'dem1.tif'), os.path.join(testDataPath, 'dem1.tif')]
2688+
alg = merge()
2689+
alg.initAlgorithm()
2690+
2691+
with tempfile.TemporaryDirectory() as outdir:
2692+
# this algorithm creates temporary text file with input layers
2693+
# so we strip its path, leaving only filename
2694+
cmd = alg.getConsoleCommands({'INPUT': source,
2695+
'OUTPUT': outdir + '/check.tif'}, context, feedback)
2696+
t = cmd[1]
2697+
cmd[1] = t[:t.find('--optfile') + 10] + t[t.find('mergeInputFiles.txt'):]
2698+
self.assertEqual(cmd,
2699+
['gdal_merge.py',
2700+
'-ot Float32 -of GTiff ' +
2701+
'-o ' + outdir + '/check.tif ' +
2702+
'--optfile mergeInputFiles.txt'])
2703+
# separate
2704+
cmd = alg.getConsoleCommands({'INPUT': source,
2705+
'SEPARATE': True,
2706+
'OUTPUT': outdir + '/check.tif'}, context, feedback)
2707+
t = cmd[1]
2708+
cmd[1] = t[:t.find('--optfile') + 10] + t[t.find('mergeInputFiles.txt'):]
2709+
self.assertEqual(cmd,
2710+
['gdal_merge.py',
2711+
'-separate -ot Float32 -of GTiff ' +
2712+
'-o ' + outdir + '/check.tif ' +
2713+
'--optfile mergeInputFiles.txt'])
2714+
2715+
# assign nodata
2716+
cmd = alg.getConsoleCommands({'INPUT': source,
2717+
'EXTRA': '-tap -ps 0.1 0.1',
2718+
'OUTPUT': outdir + '/check.tif'}, context, feedback)
2719+
t = cmd[1]
2720+
cmd[1] = t[:t.find('--optfile') + 10] + t[t.find('mergeInputFiles.txt'):]
2721+
self.assertEqual(cmd,
2722+
['gdal_merge.py',
2723+
'-ot Float32 -of GTiff -tap -ps 0.1 0.1 ' +
2724+
'-o ' + outdir + '/check.tif ' +
2725+
'--optfile mergeInputFiles.txt'])
2726+
2727+
# additional parameters
2728+
cmd = alg.getConsoleCommands({'INPUT': source,
2729+
'NODATA_OUTPUT': -9999,
2730+
'OUTPUT': outdir + '/check.tif'}, context, feedback)
2731+
t = cmd[1]
2732+
cmd[1] = t[:t.find('--optfile') + 10] + t[t.find('mergeInputFiles.txt'):]
2733+
self.assertEqual(cmd,
2734+
['gdal_merge.py',
2735+
'-a_nodata -9999 -ot Float32 -of GTiff ' +
2736+
'-o ' + outdir + '/check.tif ' +
2737+
'--optfile mergeInputFiles.txt'])
2738+
26832739
def testRearrangeBands(self):
26842740
context = QgsProcessingContext()
26852741
feedback = QgsProcessingFeedback()

0 commit comments

Comments
 (0)
Please sign in to comment.