Skip to content

Commit 0f22664

Browse files
committed
[processing] homogenize gdal algorithms
-consistent parameters naming -use additional creation options where possible -remove duplicated functionality
1 parent 10baf9a commit 0f22664

29 files changed

+800
-514
lines changed

python/plugins/processing/algs/gdal/AssignProjection.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141

4242

4343
class AssignProjection(GdalAlgorithm):
44+
4445
INPUT = 'INPUT'
4546
CRS = 'CRS'
4647
OUTPUT = 'OUTPUT'
@@ -49,11 +50,13 @@ def __init__(self):
4950
super().__init__()
5051

5152
def initAlgorithm(self, config=None):
52-
self.addParameter(QgsProcessingParameterRasterLayer(self.INPUT, self.tr('Input layer'), optional=False))
53+
self.addParameter(QgsProcessingParameterRasterLayer(self.INPUT,
54+
self.tr('Input layer')))
5355
self.addParameter(QgsProcessingParameterCrs(self.CRS,
5456
self.tr('Desired CRS')))
5557

56-
self.addOutput(QgsProcessingOutputRasterLayer(self.OUTPUT, self.tr('Layer with projection')))
58+
self.addOutput(QgsProcessingOutputRasterLayer(self.OUTPUT,
59+
self.tr('Layer with projection')))
5760

5861
def name(self):
5962
return 'assignprojection'

python/plugins/processing/algs/gdal/ClipByExtent.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,6 @@ def initAlgorithm(self, config=None):
6666
self.addParameter(QgsProcessingParameterNumber(self.NODATA,
6767
self.tr('Assign a specified nodata value to output bands'),
6868
type=QgsProcessingParameterNumber.Double,
69-
minValue=-99999999.999999,
70-
maxValue=99999999.999999,
7169
defaultValue=0.0,
7270
optional=True))
7371

@@ -81,11 +79,13 @@ def initAlgorithm(self, config=None):
8179
'class': 'processing.algs.gdal.ui.RasterOptionsWidget.RasterOptionsWidgetWrapper'}})
8280
self.addParameter(options_param)
8381

84-
self.addParameter(QgsProcessingParameterEnum(self.DATA_TYPE,
85-
self.tr('Output data type'),
86-
self.TYPES,
87-
allowMultiple=False,
88-
defaultValue=5))
82+
dataType_param = QgsProcessingParameterEnum(self.DATA_TYPE,
83+
self.tr('Output data type'),
84+
self.TYPES,
85+
allowMultiple=False,
86+
defaultValue=5)
87+
dataType_param.setFlags(dataType_param.flags() | QgsProcessingParameterDefinition.FlagAdvanced)
88+
self.addParameter(dataType_param)
8989

9090
self.addParameter(QgsProcessingParameterRasterDestination(self.OUTPUT,
9191
self.tr('Clipped (extent)')))

python/plugins/processing/algs/gdal/ClipByMask.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,6 @@ def initAlgorithm(self, config=None):
7171
self.addParameter(QgsProcessingParameterNumber(self.NODATA,
7272
self.tr('Assign a specified nodata value to output bands'),
7373
type=QgsProcessingParameterNumber.Double,
74-
minValue=-99999999.999999,
75-
maxValue=99999999.999999,
7674
defaultValue=0.0,
7775
optional=True))
7876
self.addParameter(QgsProcessingParameterBoolean(self.ALPHA_BAND,
@@ -95,11 +93,13 @@ def initAlgorithm(self, config=None):
9593
'class': 'processing.algs.gdal.ui.RasterOptionsWidget.RasterOptionsWidgetWrapper'}})
9694
self.addParameter(options_param)
9795

98-
self.addParameter(QgsProcessingParameterEnum(self.DATA_TYPE,
99-
self.tr('Output data type'),
100-
self.TYPES,
101-
allowMultiple=False,
102-
defaultValue=5))
96+
dataType_param = QgsProcessingParameterEnum(self.DATA_TYPE,
97+
self.tr('Output data type'),
98+
self.TYPES,
99+
allowMultiple=False,
100+
defaultValue=5)
101+
dataType_param.setFlags(dataType_param.flags() | QgsProcessingParameterDefinition.FlagAdvanced)
102+
self.addParameter(dataType_param)
103103

104104
self.addParameter(QgsProcessingParameterRasterDestination(self.OUTPUT,
105105
self.tr('Clipped (mask)')))

python/plugins/processing/algs/gdal/ColorRelief.py

Lines changed: 34 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
* *
1717
***************************************************************************
1818
"""
19-
from builtins import str
2019

2120
__author__ = 'Alexander Bruy'
2221
__date__ = 'October 2013'
@@ -26,11 +25,14 @@
2625

2726
__revision__ = '$Format:%H$'
2827

29-
from qgis.core import (QgsProcessingParameterRasterLayer,
28+
from qgis.core import (QgsRasterFileWriter,
29+
QgsProcessingParameterDefinition,
30+
QgsProcessingParameterRasterLayer,
3031
QgsProcessingParameterBand,
3132
QgsProcessingParameterBoolean,
3233
QgsProcessingParameterEnum,
3334
QgsProcessingParameterFile,
35+
QgsProcessingParameterString,
3436
QgsProcessingParameterRasterDestination)
3537
from processing.algs.gdal.GdalAlgorithm import GdalAlgorithm
3638
from processing.algs.gdal.GdalUtils import GdalUtils
@@ -43,23 +45,40 @@ class ColorRelief(GdalAlgorithm):
4345
COMPUTE_EDGES = 'COMPUTE_EDGES'
4446
COLOR_TABLE = 'COLOR_TABLE'
4547
MATCH_MODE = 'MATCH_MODE'
48+
OPTIONS = 'OPTIONS'
4649
OUTPUT = 'OUTPUT'
4750

48-
MATCHING_MODES = ['"0,0,0,0" RGBA', 'Exact color', 'Nearest color']
49-
5051
def __init__(self):
5152
super().__init__()
5253

5354
def initAlgorithm(self, config=None):
54-
self.addParameter(QgsProcessingParameterRasterLayer(self.INPUT, self.tr('Input layer')))
55-
self.addParameter(QgsProcessingParameterBand(
56-
self.BAND, self.tr('Band number'), parentLayerParameterName=self.INPUT))
55+
self.modes = ((self.tr('Use strict color matching'), '-exact_color_entry'),
56+
(self.tr('Use closest RGBA quadruplet'), '-nearest_color_entry'))
57+
58+
self.addParameter(QgsProcessingParameterRasterLayer(self.INPUT,
59+
self.tr('Input layer')))
60+
self.addParameter(QgsProcessingParameterBand(self.BAND,
61+
self.tr('Band number'),
62+
parentLayerParameterName=self.INPUT))
5763
self.addParameter(QgsProcessingParameterBoolean(self.COMPUTE_EDGES,
58-
self.tr('Compute edges'), defaultValue=False))
64+
self.tr('Compute edges'),
65+
defaultValue=False))
5966
self.addParameter(QgsProcessingParameterFile(self.COLOR_TABLE,
60-
self.tr('Color configuration file'), optional=False))
67+
self.tr('Color configuration file')))
6168
self.addParameter(QgsProcessingParameterEnum(self.MATCH_MODE,
62-
self.tr('Matching mode'), options=self.MATCHING_MODES, defaultValue=0))
69+
self.tr('Matching mode'),
70+
options=[i[0] for i in self.modes],
71+
defaultValue=0))
72+
options_param = QgsProcessingParameterString(self.OPTIONS,
73+
self.tr('Additional creation parameters'),
74+
defaultValue='',
75+
optional=True)
76+
77+
options_param.setFlags(options_param.flags() | QgsProcessingParameterDefinition.FlagAdvanced)
78+
options_param.setMetadata({
79+
'widget_wrapper': {
80+
'class': 'processing.algs.gdal.ui.RasterOptionsWidget.RasterOptionsWidgetWrapper'}})
81+
self.addParameter(options_param)
6382

6483
self.addParameter(QgsProcessingParameterRasterDestination(self.OUTPUT, self.tr('Color relief')))
6584

@@ -77,23 +96,19 @@ def getConsoleCommands(self, parameters, context, feedback):
7796
inLayer = self.parameterAsRasterLayer(parameters, self.INPUT, context)
7897
arguments.append(inLayer.source())
7998
arguments.append(self.parameterAsFile(parameters, self.COLOR_TABLE, context))
80-
#filePath = unicode(self.getParameterValue(self.COLOR_TABLE))
81-
#if filePath is None or filePath == '':
82-
# filePath = os.path.join(os.path.dirname(__file__), 'terrain.txt')
83-
#arguments.append(filePath)
99+
84100
out = self.parameterAsOutputLayer(parameters, self.OUTPUT, context)
85101
arguments.append(out)
86102

103+
arguments.append('-of')
104+
arguments.append(QgsRasterFileWriter.driverForExtension(os.path.splitext(out)[1]))
105+
87106
arguments.append('-b')
88107
arguments.append(str(self.parameterAsInt(parameters, self.BAND, context)))
89108

90109
if self.parameterAsBool(parameters, self.COMPUTE_EDGES, context):
91110
arguments.append('-compute_edges')
92111

93-
mode = self.parameterAsEnum(parameters, self.MATCH_MODE, context)
94-
if mode == 1:
95-
arguments.append('-exact_color_entry')
96-
elif mode == 2:
97-
arguments.append('-nearest_color_entry')
112+
arguments.append(self.modes[self.parameterAsEnum(parameters, self.MATCH_MODE, context)][1])
98113

99114
return ['gdaldem', GdalUtils.escapeAndJoin(arguments)]

python/plugins/processing/algs/gdal/GridAverage.py

Lines changed: 27 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
QgsProcessingParameterEnum,
3737
QgsProcessingParameterField,
3838
QgsProcessingParameterNumber,
39+
QgsProcessingParameterString,
3940
QgsProcessingParameterRasterDestination)
4041
from processing.algs.gdal.GdalAlgorithm import GdalAlgorithm
4142
from processing.algs.gdal.GdalUtils import GdalUtils
@@ -52,10 +53,11 @@ class GridAverage(GdalAlgorithm):
5253
MIN_POINTS = 'MIN_POINTS'
5354
ANGLE = 'ANGLE'
5455
NODATA = 'NODATA'
56+
OPTIONS = 'OPTIONS'
5557
DATA_TYPE = 'DATA_TYPE'
5658
OUTPUT = 'OUTPUT'
5759

58-
TYPE = ['Byte', 'Int16', 'UInt16', 'UInt32', 'Int32', 'Float32', 'Float64', 'CInt16', 'CInt32', 'CFloat32', 'CFloat64']
60+
TYPES = ['Byte', 'Int16', 'UInt16', 'UInt32', 'Int32', 'Float32', 'Float64', 'CInt16', 'CInt32', 'CFloat32', 'CFloat64']
5961

6062
def __init__(self):
6163
super().__init__()
@@ -78,13 +80,11 @@ def initAlgorithm(self, config=None):
7880
self.tr('The first radius of search ellipse'),
7981
type=QgsProcessingParameterNumber.Double,
8082
minValue=0.0,
81-
maxValue=99999999.999999,
8283
defaultValue=0.0))
8384
self.addParameter(QgsProcessingParameterNumber(self.RADIUS_2,
8485
self.tr('The second radius of search ellipse'),
8586
type=QgsProcessingParameterNumber.Double,
8687
minValue=0.0,
87-
maxValue=99999999.999999,
8888
defaultValue=0.0))
8989
self.addParameter(QgsProcessingParameterNumber(self.ANGLE,
9090
self.tr('Angle of search ellipse rotation in degrees (counter clockwise)'),
@@ -96,19 +96,29 @@ def initAlgorithm(self, config=None):
9696
self.tr('Minimum number of data points to use'),
9797
type=QgsProcessingParameterNumber.Integer,
9898
minValue=0,
99-
maxValue=99999999,
10099
defaultValue=0))
101100
self.addParameter(QgsProcessingParameterNumber(self.NODATA,
102101
self.tr('NODATA marker to fill empty points'),
103102
type=QgsProcessingParameterNumber.Double,
104-
minValue=-99999999.999999,
105-
maxValue=99999999.999999,
106103
defaultValue=0.0))
107-
self.addParameter(QgsProcessingParameterEnum(self.DATA_TYPE,
108-
self.tr('Output data type'),
109-
self.TYPE,
110-
allowMultiple=False,
111-
defaultValue=5))
104+
105+
options_param = QgsProcessingParameterString(self.OPTIONS,
106+
self.tr('Additional creation parameters'),
107+
defaultValue='',
108+
optional=True)
109+
options_param.setFlags(options_param.flags() | QgsProcessingParameterDefinition.FlagAdvanced)
110+
options_param.setMetadata({
111+
'widget_wrapper': {
112+
'class': 'processing.algs.gdal.ui.RasterOptionsWidget.RasterOptionsWidgetWrapper'}})
113+
self.addParameter(options_param)
114+
115+
dataType_param = QgsProcessingParameterEnum(self.DATA_TYPE,
116+
self.tr('Output data type'),
117+
self.TYPES,
118+
allowMultiple=False,
119+
defaultValue=5)
120+
dataType_param.setFlags(dataType_param.flags() | QgsProcessingParameterDefinition.FlagAdvanced)
121+
self.addParameter(dataType_param)
112122

113123
self.addParameter(QgsProcessingParameterRasterDestination(self.OUTPUT,
114124
self.tr('Interpolated (moving average)')))
@@ -147,12 +157,17 @@ def getConsoleCommands(self, parameters, context, feedback):
147157
arguments.append('-a')
148158
arguments.append(params)
149159
arguments.append('-ot')
150-
arguments.append(self.TYPE[self.parameterAsEnum(parameters, self.DATA_TYPE, context)])
160+
arguments.append(self.TYPES[self.parameterAsEnum(parameters, self.DATA_TYPE, context)])
151161

152162
out = self.parameterAsOutputLayer(parameters, self.OUTPUT, context)
153163
arguments.append('-of')
154164
arguments.append(QgsRasterFileWriter.driverForExtension(os.path.splitext(out)[1]))
155165

166+
options = self.parameterAsString(parameters, self.OPTIONS, context)
167+
if options:
168+
arguments.append('-co')
169+
arguments.append(options)
170+
156171
arguments.append(connectionString)
157172
arguments.append(out)
158173

0 commit comments

Comments
 (0)