Skip to content

Commit 486bcd6

Browse files
author
Médéric RIBREUX
committedDec 29, 2017
Fix all i.* ext scripts
1 parent e712ee6 commit 486bcd6

20 files changed

+278
-307
lines changed
 

‎python/plugins/processing/algs/grass7/Grass7Algorithm.py

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -646,26 +646,28 @@ def loadRasterLayerFromParameter(self, name, parameters, context, external=True,
646646
layer = self.parameterAsRasterLayer(parameters, name, context)
647647
self.loadRasterLayer(name, layer, external, band)
648648

649-
def loadRasterLayer(self, name, layer, external=True, band=1):
649+
def loadRasterLayer(self, name, layer, external=True, band=1, destName=None):
650650
"""
651651
Creates a dedicated command to load a raster into
652652
the temporary GRASS DB.
653653
:param name: name of the parameter.
654654
:param layer: QgsMapLayer for the raster layer.
655655
:param external: True if using r.external.
656656
:param band: imports only specified band. None for all bands.
657+
:param destName: force the destination name of the raster.
657658
"""
658659
self.inputLayers.append(layer)
659660
self.setSessionProjectionFromLayer(layer)
660-
destFilename = 'a' + os.path.basename(getTempFilename())
661-
self.exportedLayers[name] = destFilename
661+
if not destName:
662+
destName = 'rast_{}'.format(os.path.basename(getTempFilename()))
663+
self.exportedLayers[name] = destName
662664
command = '{0} input="{1}" {2}output="{3}" --overwrite -o'.format(
663665
'r.external' if external else 'r.in.gdal',
664666
os.path.normpath(layer.source()),
665667
'band={} '.format(band) if band else '',
666-
destFilename)
668+
destName)
667669
self.commands.append(command)
668-
670+
669671
def exportRasterLayerFromParameter(self, name, parameters, context, colorTable=True):
670672
"""
671673
Creates a dedicated command to export a raster from
@@ -714,19 +716,22 @@ def exportRasterLayer(self, grassName, fileName,
714716
)
715717
)
716718

717-
def exportRasterLayersIntoDirectory(self, name, parameters, context, colorTable=True):
719+
def exportRasterLayersIntoDirectory(self, name, parameters, context, colorTable=True, wholeDB=False):
718720
"""
719721
Creates a dedicated loop command to export rasters from
720722
temporary GRASS DB into a directory via gdal.
721723
:param name: name of the output directory parameter.
722724
:param parameters: Algorithm parameters dict.
723725
:param context: Algorithm context.
724726
:param colorTable: preserve color Table.
727+
:param wholeDB: export every raster layer from the GRASSDB
725728
"""
726729
# Grab directory name and temporary basename
727730
outDir = os.path.normpath(
728731
self.parameterAsString(parameters, name, context))
729-
basename = name + self.uniqueSuffix
732+
basename = ''
733+
if not wholeDB:
734+
basename = name + self.uniqueSuffix
730735

731736
# Add a loop export from the basename
732737
for cmd in [self.commands, self.outputCommands]:
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
i.in.spotvgt
22
Imports SPOT VGT NDVI data into a raster map.
33
Imagery (i.*)
4-
QgsProcessingParameterRasterLayer|input|Name of input SPOT VGT NDVI HDF file|None|False
4+
QgsProcessingParameterFile|input|Name of input SPOT VGT NDVI HDF file|False|hdf|None|False
55
*QgsProcessingParameterBoolean|-a|Also import quality map (SM status map layer) and filter NDVI map|False
66
QgsProcessingParameterRasterDestination|output|SPOT NDVI Raster

‎python/plugins/processing/algs/grass7/ext/i.py

Lines changed: 126 additions & 130 deletions
Original file line numberDiff line numberDiff line change
@@ -25,180 +25,176 @@
2525

2626
__revision__ = '$Format:%H$'
2727

28-
from processing.core.parameters import getParameterFromString
29-
from processing.tools.system import isWindows
30-
from ..Grass7Utils import Grass7Utils
31-
from os import path
32-
from copy import deepcopy
33-
34-
35-
def multipleOutputDir(alg, field, basename=None):
36-
"""
37-
Handle multiple output of rasters into a
38-
directory.
28+
import os
29+
from processing.tools.system import (isWindows, getTempFilename)
30+
from processing.algs.grass7.Grass7Utils import Grass7Utils
31+
from qgis.core import QgsProcessingParameterString
32+
from qgis.core import QgsMessageLog
33+
34+
35+
def orderedInput(alg, parameters, context, src, tgt, numSeq=None):
36+
"""Import multiple rasters in order
37+
:param alg: algorithm object.
38+
:param parameters: algorithm parameters dict.
39+
:param context: algorithm context.
40+
:param src: Name of the source parameter.
41+
:param tgt: Name of a new input parameter.
42+
:param numSeq: List of a sequence for naming layers.
3943
"""
40-
# We need to know where is the output directory
41-
outputDir = alg.getOutputValue(field)
42-
43-
# We need to grab the variable basename
44-
if basename:
45-
commands = ["for r in $(g.list type=rast pattern='{}*'); do".format(basename)]
46-
# Otherwise, export everything
47-
else:
48-
commands = ["for r in $(g.list type=rast); do"]
49-
commands.append(" r.out.gdal -c -t -f input=${{r}} output={}/${{r}}.tif createopt=\"TFW=YES,COMPRESS=LZW\"".format(outputDir))
50-
commands.append("done")
51-
alg.commands.extend(commands)
52-
alg.outputCommands.extend(commands)
53-
54-
55-
def orderedInput(alg, inputParameter, targetParameterDef, numSeq=None):
56-
"""Inport multiple rasters in the order"""
57-
rasters = alg.getParameterValue(inputParameter).split(';')
58-
# TODO: make targetParameter
59-
inputParameter = getParameterFromString(targetParameterDef)
60-
rootFilename = '{}_'.format(alg.getTempFilename())
61-
inputParameter.value = rootFilename
62-
alg.addParameter(inputParameter)
44+
rootFilename = 'rast_{}.'.format(os.path.basename(getTempFilename()))
45+
#parameters[tgt] = rootFilename
46+
param = QgsProcessingParameterString(tgt, 'virtual input',
47+
rootFilename, False, False)
48+
alg.addParameter(param)
49+
50+
rasters = alg.parameterAsLayerList(parameters, src, context)
6351
# Handle specific range
6452
if numSeq is None:
6553
numSeq = list(range(1, len(rasters) + 1))
54+
55+
for idx, raster in enumerate(rasters):
56+
rasterName = '{}{}'.format(rootFilename, numSeq[idx])
57+
alg.loadRasterLayer(rasterName, raster, False, None, rasterName)
6658

67-
for idx in range(len(rasters)):
68-
layer = rasters[idx]
69-
if layer in list(alg.exportedLayers.keys()):
70-
continue
71-
else:
72-
destFilename = '{}{}'.format(rootFilename, numSeq[idx])
73-
alg.setSessionProjectionFromLayer(layer, alg.commands)
74-
alg.exportedLayers[layer] = destFilename
75-
command = 'r.external input={} band=1 output={} --overwrite -o'.format(layer, destFilename)
76-
alg.commands.append(command)
77-
78-
alg.setSessionProjectionFromProject(alg.commands)
79-
80-
region = \
81-
str(alg.getParameterValue(alg.GRASS_REGION_EXTENT_PARAMETER))
82-
regionCoords = region.split(',')
83-
command = 'g.region'
84-
command += ' -a'
85-
command += ' n=' + str(regionCoords[3])
86-
command += ' s=' + str(regionCoords[2])
87-
command += ' e=' + str(regionCoords[1])
88-
command += ' w=' + str(regionCoords[0])
89-
cellsize = alg.getParameterValue(alg.GRASS_REGION_CELLSIZE_PARAMETER)
90-
if cellsize:
91-
command += ' res=' + str(cellsize)
92-
else:
93-
command += ' res=' + str(alg.getDefaultCellsize(parameters, context))
94-
alignToResolution = \
95-
alg.getParameterValue(alg.GRASS_REGION_ALIGN_TO_RESOLUTION)
96-
if alignToResolution:
97-
command += ' -a'
98-
alg.commands.append(command)
99-
return rootFilename
59+
# Don't forget to remove the old input parameter
60+
alg.removeParameter(src)
61+
10062

101-
102-
def regroupRasters(alg, parameters, field, groupField, subgroupField=None, extFile=None):
63+
def regroupRasters(alg, parameters, context, src, group, subgroup=None, extFile=None):
10364
"""
10465
Group multiple input rasters into a group
10566
* If there is a subgroupField, a subgroup will automatically be created.
10667
* When an external file is provided, the file is copied into the respective
107-
directory of the subgroup.
108-
* extFile is a dict of the form 'parameterName':'directory name'.
68+
directory of the subgroup.
10969
:param parameters:
70+
:param context:
71+
:param src: name of input parameter with multiple rasters.
72+
:param group: name of group.
73+
:param subgroup: name of subgroup.
74+
:param extFile: dict : parameterName:directory name
11075
"""
111-
# List of rasters names
112-
113-
new_parameters = deepcopy(parameters)
76+
# Create a group parameter
77+
groupName = 'group_{}'.format(os.path.basename(getTempFilename()))
78+
param = QgsProcessingParameterString(group, 'virtual group',
79+
groupName, False, False)
80+
alg.addParameter(param)
11481

115-
rasters = alg.getParameterFromName(field)
116-
rastersList = rasters.value.split(';')
117-
del new_parameters[field]
82+
# Create a subgroup
83+
subgroupName = None
84+
if subgroup:
85+
subgroupName = 'subgroup_{}'.format(os.path.basename(getTempFilename()))
86+
param = QgsProcessingParameterString(subgroup, 'virtual subgroup',
87+
subgroupName, False, False)
88+
alg.addParameter(param)
89+
90+
# Compute raster names
91+
rasters = alg.parameterAsLayerList(parameters, src, context)
92+
rasterNames = []
93+
for idx, raster in enumerate(rasters):
94+
name = '{}_{}'.format(src, idx)
95+
if name in alg.exportedLayers:
96+
rasterNames.append(alg.exportedLayers[name])
11897

11998
# Insert a i.group command
120-
group = getParameterFromString("ParameterString|{}|group of rasters|None|False|False".format(groupField))
121-
new_parameters[group.name()] = alg.getTempFilename()
122-
123-
if subgroupField:
124-
subgroup = getParameterFromString("ParameterString|{}|subgroup of rasters|None|False|False".format(subgroupField))
125-
new_parameters[subgroup.name()] = alg.getTempFilename()
126-
12799
command = 'i.group group={}{} input={}'.format(
128-
new_parameters[group.name()],
129-
' subgroup={}'.format(new_parameters[subgroup.name()]) if subgroupField else '',
130-
','.join([alg.exportedLayers[f] for f in rastersList])
131-
)
100+
groupName,
101+
' subgroup={}'.format(subgroupName) if subgroup else '',
102+
','.join(rasterNames))
132103
alg.commands.append(command)
133104

134105
# Handle external files
135-
if subgroupField and extFile:
136-
for ext in list(extFile.keys()):
137-
extFileName = new_parameters[ext]
138-
if extFileName:
139-
shortFileName = path.basename(extFileName)
140-
destPath = path.join(Grass7Utils.grassMapsetFolder(),
141-
'PERMANENT',
142-
'group', new_parameters[group.name()],
143-
'subgroup', new_parameters[subgroup.name()],
144-
extFile[ext], shortFileName)
145-
copyFile(alg, extFileName, destPath)
146-
new_parameters[ext] = shortFileName
147-
148-
# modify parameters values
149-
alg.processCommand(new_parameters)
150-
151-
return group.value
152-
153-
154-
def exportInputRasters(alg, rasterDic):
106+
# if subgroupField and extFile:
107+
# for ext in extFile.keys():
108+
# extFileName = new_parameters[ext]
109+
# if extFileName:
110+
# shortFileName = os.path.basename(extFileName)
111+
# destPath = os.path.join(Grass7Utils.grassMapsetFolder(),
112+
# 'PERMANENT',
113+
# 'group', new_parameters[group.name()],
114+
# 'subgroup', new_parameters[subgroup.name()],
115+
# extFile[ext], shortFileName)
116+
# copyFile(alg, extFileName, destPath)
117+
118+
119+
alg.removeParameter(src)
120+
121+
return groupName, subgroupName
122+
123+
124+
def importSigFile(alg, group, subgroup, src, sigDir='sig'):
125+
"""
126+
Import a signature file into an
127+
internal GRASSDB folder
128+
"""
129+
shortSigFile = os.path.basename(src)
130+
interSig = os.path.join(Grass7Utils.grassMapsetFolder(),
131+
'PERMANENT', 'group', group, 'subgroup',
132+
subgroup, sigDir, shortSigFile)
133+
copyFile(alg, src, interSig)
134+
return shortSigFile
135+
136+
137+
def exportSigFile(alg, group, subgroup, dest, sigDir='sig'):
138+
"""
139+
Export a signature file from internal GRASSDB
140+
to final destination
141+
"""
142+
shortSigFile = os.path.basename(dest)
143+
interSig = os.path.join(Grass7Utils.grassMapsetFolder(),
144+
'PERMANENT', 'group', group, 'subgroup',
145+
subgroup, sigDir, shortSigFile)
146+
moveFile(alg, interSig, dest)
147+
return interSig
148+
149+
150+
def exportInputRasters(alg, parameters, context, rasterDic):
155151
"""
156152
Export input rasters
157153
Use a dict to make input/output link:
158154
{ 'inputName1': 'outputName1', 'inputName2': 'outputName2'}
159155
"""
156+
createOpt = alg.parameterAsString(parameters, alg.GRASS_RASTER_FORMAT_OPT, context)
157+
metaOpt = alg.parameterAsString(parameters, alg.GRASS_RASTER_FORMAT_META, context)
158+
160159
# Get inputs and outputs
161-
for inputName, outputName in list(rasterDic.items()):
162-
inputRaster = alg.getParameterValue(inputName)
163-
outputRaster = alg.getOutputFromName(outputName)
164-
command = 'r.out.gdal -c -t -f --overwrite createopt="TFW=YES,COMPRESS=LZW" input={} output=\"{}\"'.format(
165-
alg.exportedLayers[inputRaster],
166-
outputRaster.value
167-
)
168-
alg.commands.append(command)
169-
alg.outputCommands.append(command)
160+
for inputName, outputName in rasterDic.items():
161+
fileName = os.path.normpath(
162+
alg.parameterAsOutputLayer(parameters, outputName, context))
163+
grassName = alg.exportedLayers[inputName]
164+
outFormat = Grass7Utils.getRasterFormatFromFilename(fileName)
165+
alg.exportRasterLayer(grassName, fileName, True, outFormat, createOpt, metaOpt)
170166

171167

172168
def verifyRasterNum(alg, parameters, context, rasters, mini, maxi=None):
173-
"""Verify if we have at least n rasters in multipleInput"""
174-
num = len(alg.parameterAsStrings(rasters).split(';'))
169+
"""Verify that we have at least n rasters in multipleInput"""
170+
num = len(alg.parameterAsLayerList(parameters, rasters, context))
175171
if num < mini:
176172
return 'You need to set at least {} input rasters for this algorithm!'.format(mini)
177173
if maxi and num > maxi:
178174
return 'You need to set a maximum of {} input rasters for this algorithm!'.format(maxi)
179175
return None
180176

181177

182-
def file2Output(alg, output):
183-
"""Transform an OutputFile to a parameter"""
184-
# Get the outputFile
185-
outputFile = alg.getOutputFromName(output)
186-
alg.removeOutputFromName(output)
178+
# def file2Output(alg, output):
179+
# """Transform an OutputFile to a parameter"""
180+
# # Get the outputFile
181+
# outputFile = alg.getOutputFromName(output)
182+
# alg.removeOutputFromName(output)
187183

188-
# Create output parameter
189-
param = getParameterFromString("ParameterString|{}|output file|None|False|False".format(output))
190-
param.value = outputFile.value
191-
alg.addParameter(param)
184+
# # Create output parameter
185+
# param = getParameterFromString("ParameterString|{}|output file|None|False|False".format(output))
186+
# param.value = outputFile.value
187+
# alg.addParameter(param)
192188

193-
return outputFile
189+
# return outputFile
194190

195191

196192
def createDestDir(alg, toFile):
197193
""" Generates an mkdir command for GRASS7 script """
198194
# Creates the destination directory
199195
command = "{} {}".format(
200196
"MD" if isWindows() else "mkdir -p",
201-
path.dirname(toFile)
197+
os.path.dirname(toFile)
202198
)
203199
alg.commands.append(command)
204200

‎python/plugins/processing/algs/grass7/ext/i_albedo.py

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,12 @@
2828
from .i import verifyRasterNum
2929

3030

31-
def checkParameterValuesBeforeExecuting(alg):
32-
if alg.getParameterValue('-m'):
33-
return verifyRasterNum(alg, 'input', 7)
34-
elif alg.getParameterValue('-n'):
35-
return verifyRasterNum(alg, 'input', 2)
36-
elif alg.getParameterValue('-l') or alg.getParameterValue('-a'):
37-
return verifyRasterNum(alg, 'input', 6)
31+
def checkParameterValuesBeforeExecuting(alg, parameters, context):
32+
if alg.parameterAsBool(parameters, '-m', context):
33+
return verifyRasterNum(alg, parameters, context, 'input', 7)
34+
elif alg.parameterAsBool(parameters, '-n', context):
35+
return verifyRasterNum(alg, parameters, context, 'input', 2)
36+
elif (alg.parameterAsBool(parameters, '-l', context)
37+
or alg.parameterAsBool(parameters, '-a', context)):
38+
return verifyRasterNum(alg, parameters, context, 'input', 6)
3839
return None

‎python/plugins/processing/algs/grass7/ext/i_cca.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525

2626
__revision__ = '$Format:%H$'
2727

28-
from .i import verifyRasterNum, regroupRasters
28+
from .i import verifyRasterNum, regroupRasters, importSigFile
2929

3030

3131
def checkParameterValuesBeforeExecuting(alg, parameters, context):
@@ -34,7 +34,12 @@ def checkParameterValuesBeforeExecuting(alg, parameters, context):
3434

3535
def processCommand(alg, parameters, context):
3636
# Regroup rasters
37-
regroupRasters(alg, parameters, 'input', 'group', 'subgroup', {'signature': 'sig'})
37+
group, subgroup = regroupRasters(alg, parameters, context,
38+
'input', 'group', 'subgroup')
3839

40+
signatureFile = alg.parameterAsString(parameters, 'signature', context)
41+
shortSigFile = importSigFile(alg, group, subgroup, signatureFile)
42+
parameters['signature'] = shortSigFile
43+
3944
# Handle other parameters
40-
alg.processCommand(alg, parameters, context)
45+
alg.processCommand(parameters, context)

‎python/plugins/processing/algs/grass7/ext/i_cluster.py

Lines changed: 15 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -25,34 +25,26 @@
2525

2626
__revision__ = '$Format:%H$'
2727

28-
from .i import regroupRasters, file2Output, moveFile, verifyRasterNum
29-
from os import path
30-
from ..Grass7Utils import Grass7Utils
28+
import os
29+
from .i import regroupRasters, verifyRasterNum, exportSigFile
3130

31+
def checkParameterValuesBeforeExecuting(alg, parameters, context):
32+
return verifyRasterNum(alg, parameters, context, 'input', 2)
3233

33-
def checkParameterValuesBeforeExecuting(alg):
34-
return verifyRasterNum(alg, 'input', 2)
3534

36-
37-
def processCommand(alg, parameters):
35+
def processCommand(alg, parameters, context):
3836
# We need to extract the basename of the signature file
39-
signatureFile = alg.getOutputFromName('signaturefile')
40-
origSigFile = signatureFile.value
41-
shortSigFile = path.basename(origSigFile)
42-
alg.setOutputValue('signaturefile', shortSigFile)
43-
44-
# Transform output files in string parameters
45-
signatureFile = file2Output(alg, 'signaturefile')
46-
reportFile = file2Output(alg, 'reportfile')
37+
signatureFile = alg.parameterAsString(parameters, 'signaturefile', context)
38+
shortSigFile = os.path.basename(signatureFile)
39+
parameters['signaturefile'] = shortSigFile
4740

4841
# Regroup rasters
49-
group, subgroup = regroupRasters(alg, parameters, 'input', 'group', 'subgroup')
50-
42+
group, subgroup = regroupRasters(alg, parameters, context, 'input', 'group', 'subgroup')
43+
alg.processCommand(parameters, context)
44+
5145
# Re-add signature files
52-
alg.addOutput(signatureFile)
53-
alg.addOutput(reportFile)
46+
parameters['signaturefile'] = signatureFile
47+
48+
# Export signature file
49+
exportSigFile(alg, group, subgroup, signatureFile)
5450

55-
# Find Grass directory
56-
interSig = path.join(Grass7Utils.grassMapsetFolder(), 'PERMANENT', 'group', group, 'subgroup', subgroup, 'sig', shortSigFile)
57-
moveFile(alg, interSig, origSigFile)
58-
alg.setOutputValue('signaturefile', origSigFile)

‎python/plugins/processing/algs/grass7/ext/i_colors_enhance.py

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -28,21 +28,12 @@
2828
from .i import exportInputRasters
2929

3030

31-
def processCommand(alg, parameters):
32-
31+
def processCommand(alg, parameters, context):
3332
# Temporary remove outputs:
34-
outputs = [alg.getOutputFromName('{}output'.format(f)) for f in ['red', 'green', 'blue']]
35-
for out in outputs:
36-
alg.removeOutputFromName(out.name)
37-
38-
alg.processCommand(parameters)
39-
40-
# Re-add outputs
41-
for output in outputs:
42-
alg.addOutput(output)
33+
alg.processCommand(parameters, context, True)
4334

4435

45-
def processOutputs(alg):
36+
def processOutputs(alg, parameters, context):
4637
# Input rasters are output rasters
4738
rasterDic = {'red': 'redoutput', 'green': 'greenoutput', 'blue': 'blueoutput'}
48-
exportInputRasters(alg, rasterDic)
39+
exportInputRasters(alg, parameters, context, rasterDic)

‎python/plugins/processing/algs/grass7/ext/i_evapo_mh.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,11 @@
2626
__revision__ = '$Format:%H$'
2727

2828

29-
def checkParameterValuesBeforeExecuting(alg):
30-
if alg.getParameterValue('-h') and alg.getParameterValue('precipitation'):
29+
def checkParameterValuesBeforeExecuting(alg, parameters, context):
30+
if (alg.parameterAsBool(parameters, '-h', context)
31+
and alg.parameterAsLayer(parameters, 'precipitation', context)):
3132
return alg.tr('You can\'t use original Hargreaves flag and precipitation parameter together!')
32-
if not alg.getParameterValue('-h') and not alg.getParameterValue('precipitation'):
33+
if (not alg.parameterAsBool(parameters, '-h', context)
34+
and not alg.parameterAsLayer(parameters, 'precipitation', context)):
3335
return alg.tr('If you don\'t use original Hargreaves flag, you must set the precipitation raster parameter!')
3436
return None

‎python/plugins/processing/algs/grass7/ext/i_gensig.py

Lines changed: 14 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -25,27 +25,22 @@
2525

2626
__revision__ = '$Format:%H$'
2727

28-
from .i import regroupRasters, file2Output, moveFile
29-
from os import path
30-
from ..Grass7Utils import Grass7Utils
28+
import os
29+
from .i import regroupRasters, exportSigFile
3130

32-
33-
def processCommand(alg, parameters):
34-
# Transform output files in string parameter
35-
signatureFile = alg.getOutputFromName('signaturefile')
36-
origSigFile = signatureFile.value
37-
shortSigFile = path.basename(origSigFile)
38-
alg.setOutputValue('signaturefile', shortSigFile)
39-
40-
signatureFile = file2Output(alg, 'signaturefile')
31+
def processCommand(alg, parameters, context):
32+
# We need to extract the basename of the signature file
33+
signatureFile = alg.parameterAsString(parameters, 'signaturefile', context)
34+
shortSigFile = os.path.basename(signatureFile)
35+
parameters['signaturefile'] = shortSigFile
4136

4237
# Regroup rasters
43-
group, subgroup = regroupRasters(alg, parameters, 'input', 'group', 'subgroup')
44-
38+
group, subgroup = regroupRasters(alg, parameters, context, 'input', 'group', 'subgroup')
39+
alg.processCommand(parameters, context)
40+
4541
# Re-add signature files
46-
alg.addOutput(signatureFile)
42+
parameters['signaturefile'] = signatureFile
43+
44+
# Export signature file
45+
exportSigFile(alg, group, subgroup, signatureFile)
4746

48-
# Find Grass directory
49-
interSig = path.join(Grass7Utils.grassMapsetFolder(), 'PERMANENT', 'group', group, 'subgroup', subgroup, 'sig', shortSigFile)
50-
moveFile(alg, interSig, origSigFile)
51-
alg.setOutputValue('signaturefile', origSigFile)

‎python/plugins/processing/algs/grass7/ext/i_gensigset.py

Lines changed: 14 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -25,27 +25,22 @@
2525

2626
__revision__ = '$Format:%H$'
2727

28-
from .i import regroupRasters, file2Output, moveFile
29-
from os import path
30-
from ..Grass7Utils import Grass7Utils
28+
import os
29+
from .i import regroupRasters, exportSigFile
3130

32-
33-
def processCommand(alg, parameters):
34-
# Transform output files in string parameter
35-
signatureFile = alg.getOutputFromName('signaturefile')
36-
origSigFile = signatureFile.value
37-
shortSigFile = path.basename(origSigFile)
38-
alg.setOutputValue('signaturefile', shortSigFile)
39-
40-
signatureFile = file2Output(alg, 'signaturefile')
31+
def processCommand(alg, parameters, context):
32+
# We need to extract the basename of the signature file
33+
signatureFile = alg.parameterAsString(parameters, 'signaturefile', context)
34+
shortSigFile = os.path.basename(signatureFile)
35+
parameters['signaturefile'] = shortSigFile
4136

4237
# Regroup rasters
43-
group, subgroup = regroupRasters(alg, parameters, 'input', 'group', 'subgroup')
44-
38+
group, subgroup = regroupRasters(alg, parameters, context, 'input', 'group', 'subgroup')
39+
alg.processCommand(parameters, context)
40+
4541
# Re-add signature files
46-
alg.addOutput(signatureFile)
42+
parameters['signaturefile'] = signatureFile
43+
44+
# Export signature file
45+
exportSigFile(alg, group, subgroup, signatureFile, 'sigset')
4746

48-
# Find Grass directory
49-
interSig = path.join(Grass7Utils.grassMapsetFolder(), 'PERMANENT', 'group', group, 'subgroup', subgroup, 'sigset', shortSigFile)
50-
moveFile(alg, interSig, origSigFile)
51-
alg.setOutputValue('signaturefile', origSigFile)

‎python/plugins/processing/algs/grass7/ext/i_group.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,5 +28,5 @@
2828
from .i import verifyRasterNum
2929

3030

31-
def checkParameterValuesBeforeExecuting(alg):
32-
return verifyRasterNum(alg, 'input', 2)
31+
def checkParameterValuesBeforeExecuting(alg, parameters, context):
32+
return verifyRasterNum(alg, parameters, context, 'input', 2)

‎python/plugins/processing/algs/grass7/ext/i_in_spotvgt.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@
2626
__revision__ = '$Format:%H$'
2727

2828

29-
def processInputs(alg):
29+
def processInputs(alg, parameters, context):
3030
# Here, we apply directly the algorithm
3131
# So we just need to get the projection of the layer !
32-
layer = alg.getParameterValue('input')
33-
alg.setSessionProjectionFromLayer(layer, alg.commands)
32+
layer = alg.parameterAsRasterLayer(parameters, 'input', context)
33+
alg.setSessionProjectionFromLayer(layer)

‎python/plugins/processing/algs/grass7/ext/i_landsat_acca.py

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -28,22 +28,14 @@
2828
from .i import verifyRasterNum, orderedInput
2929

3030

31-
def checkParameterValuesBeforeExecuting(alg):
32-
return verifyRasterNum(alg, 'rasters', 5, 5)
31+
def checkParameterValuesBeforeExecuting(alg, parameters, context):
32+
return verifyRasterNum(alg, parameters, context, 'rasters', 5, 5)
3333

3434

35-
def processInputs(alg):
36-
orderedInput(alg, 'rasters',
37-
"ParameterString|input|Base name of input raster bands|None|False|False",
35+
def processInputs(alg, parameters, context):
36+
orderedInput(alg, parameters, context, 'rasters', 'input',
3837
[2, 3, 4, 5, 61])
3938

4039

41-
def processCommand(alg, parameters):
42-
# Remove rasters parameter
43-
rasters = alg.getParameterFromName('rasters')
44-
alg.parameters.remove(rasters)
45-
46-
alg.processCommand()
47-
48-
# re-add rasters
49-
alg.addParameter(rasters)
40+
def processCommand(alg, parameters, context):
41+
alg.processCommand(parameters, context)

‎python/plugins/processing/algs/grass7/ext/i_landsat_toar.py

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,20 +26,16 @@
2626
__revision__ = '$Format:%H$'
2727

2828
from .i import verifyRasterNum, orderedInput
29-
from processing.core.parameters import getParameterFromString
3029

3130

3231
def checkParameterValuesBeforeExecuting(alg, parameters, context):
3332
return verifyRasterNum(alg, parameters, context, 'rasters', 5, 12)
3433

3534

3635
def processInputs(alg, parameters, context):
37-
orderedInput(alg, 'rasters',
38-
"ParameterString|input|Base name of input raster bands|None|False|False",
36+
orderedInput(alg, parameters, context, 'rasters', 'input',
3937
[1, 2, 3, 4, 5, 61, 62, 7, 8])
4038

4139

4240
def processCommand(alg, parameters, context):
43-
# Remove rasters parameter
44-
rasters = alg.getParameterFromName('rasters')
45-
alg.parameters.remove(rasters)
41+
alg.processCommand(parameters, context)

‎python/plugins/processing/algs/grass7/ext/i_maxlik.py

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,18 @@
2525

2626
__revision__ = '$Format:%H$'
2727

28-
from .i import regroupRasters
28+
from .i import regroupRasters, importSigFile
2929

3030

31-
def processCommand(alg, parameters):
32-
# Regroup rasters
33-
regroupRasters(alg, parameters, 'input', 'group', 'subgroup', {'signaturefile': 'sig'})
31+
def processCommand(alg, parameters, context):
32+
group, subgroup = regroupRasters(alg, parameters, context,
33+
'input', 'group', 'subgroup')
34+
35+
# import signature
36+
signatureFile = alg.parameterAsString(parameters, 'signaturefile', context)
37+
shortSigFile = importSigFile(alg, group, subgroup, signatureFile)
38+
parameters['signaturefile'] = shortSigFile
39+
40+
# Handle other parameters
41+
alg.processCommand(parameters, context)
42+

‎python/plugins/processing/algs/grass7/ext/i_oif.py

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -25,18 +25,9 @@
2525

2626
__revision__ = '$Format:%H$'
2727

28-
from .i import file2Output, verifyRasterNum
28+
from .i import verifyRasterNum
2929

3030

31-
def checkParameterValuesBeforeExecuting(alg):
32-
return verifyRasterNum(alg, 'input', 4)
31+
def checkParameterValuesBeforeExecuting(alg, parameters, context):
32+
return verifyRasterNum(alg, parameters, context, 'input', 4)
3333

34-
35-
def processCommand(alg, parameters):
36-
# Transform output file in string parameter
37-
oifFile = file2Output(alg, 'output')
38-
39-
alg.processCommand()
40-
41-
# Re-add output file
42-
alg.addOutput(oifFile)

‎python/plugins/processing/algs/grass7/ext/i_pansharpen.py

Lines changed: 24 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -25,33 +25,28 @@
2525

2626
__revision__ = '$Format:%H$'
2727

28-
from processing.core.parameters import getParameterFromString
29-
30-
31-
def processCommand(alg, parameters):
32-
33-
# Temporary remove outputs:
34-
outputs = [alg.getOutputFromName('{}output'.format(f)) for f in ['red', 'green', 'blue']]
35-
for out in outputs:
36-
alg.removeOutputFromName(out.name)
37-
38-
# create a false output
39-
base = getParameterFromString('ParameterString|output|Name for output basename raster map(s)|None|False|False')
40-
base.value = alg.getTempFilename()
41-
alg.addParameter(base)
42-
alg.processCommand()
43-
44-
# Re-add outputs
45-
for output in outputs:
46-
alg.addOutput(output)
47-
48-
49-
def processOutputs(alg):
50-
base = alg.getParameterValue('output')
28+
import os
29+
from processing.tools.system import getTempFilename
30+
from processing.algs.grass7.Grass7Utils import Grass7Utils
31+
from qgis.core import QgsProcessingParameterString
32+
33+
def processCommand(alg, parameters, context):
34+
# Temporary remove outputs and add a virtual output parameter
35+
outputName = 'output_{}'.format(os.path.basename(getTempFilename()))
36+
param = QgsProcessingParameterString('output', 'virtual output',
37+
outputName, False, False)
38+
alg.addParameter(param)
39+
alg.processCommand(parameters, context, True)
40+
41+
42+
def processOutputs(alg, parameters, context):
43+
outputName = alg.parameterAsString(parameters, 'output', context)
44+
createOpt = alg.parameterAsString(parameters, alg.GRASS_RASTER_FORMAT_OPT, context)
45+
metaOpt = alg.parameterAsString(parameters, alg.GRASS_RASTER_FORMAT_META, context)
5146
for channel in ['red', 'green', 'blue']:
52-
command = 'r.out.gdal -c -t -f --overwrite createopt="TFW=YES,COMPRESS=LZW" input={} output=\"{}\"'.format(
53-
'{}_{}'.format(base, channel),
54-
alg.getOutputValue('{}output'.format(channel))
55-
)
56-
alg.commands.append(command)
57-
alg.outputCommands.append(command)
47+
fileName = alg.parameterAsOutputLayer(parameters, '{}output'.format(channel), context)
48+
grassName = '{}_{}'.format(outputName, channel)
49+
outFormat = Grass7Utils.getRasterFormatFromFilename(fileName)
50+
alg.exportRasterLayer(grassName, fileName, True, outFormat, createOpt, metaOpt)
51+
52+

‎python/plugins/processing/algs/grass7/ext/i_segment.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
from .i import regroupRasters
2929

3030

31-
def processCommand(alg, parameters):
31+
def processCommand(alg, parameters, context):
3232
# Regroup rasters
33-
regroupRasters(alg, parameters, 'input', 'group')
33+
regroupRasters(alg, parameters, context, 'input', 'group')
34+
alg.processCommand(parameters, context)

‎python/plugins/processing/algs/grass7/ext/i_smap.py

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,18 @@
2525

2626
__revision__ = '$Format:%H$'
2727

28-
from .i import regroupRasters
28+
from .i import regroupRasters, importSigFile
2929

3030

31-
def processCommand(alg, parameters):
31+
def processCommand(alg, parameters, context):
3232
# Regroup rasters
33-
regroupRasters(alg, parameters, 'input', 'group', 'subgroup', {'signaturefile': 'sigset'})
33+
group, subgroup = regroupRasters(alg, parameters, context, 'input', 'group', 'subgroup')
34+
35+
# import signature
36+
signatureFile = alg.parameterAsString(parameters, 'signaturefile', context)
37+
shortSigFile = importSigFile(alg, group, subgroup, signatureFile, 'sigset')
38+
parameters['signaturefile'] = shortSigFile
39+
40+
# Handle other parameters
41+
alg.processCommand(parameters, context)
42+

‎python/plugins/processing/algs/grass7/ext/r_mapcalc.py

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -58,11 +58,7 @@ def processCommand(alg, parameters, context):
5858

5959
def processOutputs(alg, parameters, context):
6060
# We need to export every raster from the GRASSDB
61-
outputDir = alg.parameterAsString(parameters, 'output_dir', context)
62-
# TODO Windows support
63-
# TODO Format/options support
64-
commands = ["for r in $(g.list type=rast); do"]
65-
commands.append(" r.out.gdal --overwrite -c -t -f input=${{r}} output={}/${{r}}.tif createopt=\"TFW=YES,COMPRESS=LZW\"".format(outputDir))
66-
commands.append("done")
67-
alg.commands.extend(commands)
61+
alg.exportRasterLayersIntoDirectory('output_dir',
62+
parameters, context,
63+
wholeDB=True)
6864

0 commit comments

Comments
 (0)
Please sign in to comment.