39
39
from processing .core .GeoAlgorithmExecutionException import GeoAlgorithmExecutionException
40
40
from processing .algs .qgis .ui .RasterCalculatorWidgets import LayersListWidgetWrapper , ExpressionWidgetWrapper
41
41
42
+
42
43
class RasterCalculator (GeoAlgorithm ):
43
44
44
45
LAYERS = 'LAYERS'
@@ -52,11 +53,13 @@ def defineCharacteristics(self):
52
53
self .group , self .i18n_group = self .trAlgorithm ('Raster' )
53
54
54
55
self .addParameter (ParameterMultipleInput (self .LAYERS ,
55
- self .tr ('Input layers' ),
56
- datatype = dataobjects .TYPE_RASTER ,
57
- optional = True ,
58
- metadata = {'widget_wrapper' : LayersListWidgetWrapper }))
56
+ self .tr ('Input layers' ),
57
+ datatype = dataobjects .TYPE_RASTER ,
58
+ optional = True ,
59
+ metadata = {'widget_wrapper' : LayersListWidgetWrapper }))
60
+
59
61
class ParameterRasterCalculatorExpression (ParameterString ):
62
+
60
63
def evaluateForModeler (self , value , model ):
61
64
# print value
62
65
for i in list (model .inputs .values ()):
@@ -76,8 +79,8 @@ def evaluateForModeler(self, value, model):
76
79
return value
77
80
78
81
self .addParameter (ParameterRasterCalculatorExpression (self .EXPRESSION , self .tr ('Expression' ),
79
- multiline = True ,
80
- metadata = {'widget_wrapper' : ExpressionWidgetWrapper }))
82
+ multiline = True ,
83
+ metadata = {'widget_wrapper' : ExpressionWidgetWrapper }))
81
84
self .addParameter (ParameterNumber (self .CELLSIZE ,
82
85
self .tr ('Cellsize (use 0 or empty to set it automatically)' ),
83
86
minValue = 0.0 , default = 0.0 , optional = True ))
@@ -86,7 +89,6 @@ def evaluateForModeler(self, value, model):
86
89
optional = True ))
87
90
self .addOutput (OutputRaster (self .OUTPUT , self .tr ('Output' )))
88
91
89
-
90
92
def processAlgorithm (self , progress ):
91
93
expression = self .getParameterValue (self .EXPRESSION )
92
94
layersValue = self .getParameterValue (self .LAYERS )
@@ -123,19 +125,20 @@ def processAlgorithm(self, progress):
123
125
bbox .combineExtentWith (lyr .extent ())
124
126
else :
125
127
raise GeoAlgorithmExecutionException (self .tr ("No layers selected" ))
128
+
126
129
def _cellsize (layer ):
127
130
return (layer .extent ().xMaximum () - layer .extent ().xMinimum ()) / layer .width ()
128
131
cellsize = self .getParameterValue (self .CELLSIZE ) or min ([_cellsize (lyr ) for lyr in layersDict .values ()])
129
132
width = math .floor ((bbox .xMaximum () - bbox .xMinimum ()) / cellsize )
130
133
height = math .floor ((bbox .yMaximum () - bbox .yMinimum ()) / cellsize )
131
134
driverName = GdalUtils .getFormatShortNameFromFilename (output )
132
135
calc = QgsRasterCalculator (expression ,
133
- output ,
134
- driverName ,
135
- bbox ,
136
- width ,
137
- height ,
138
- entries )
136
+ output ,
137
+ driverName ,
138
+ bbox ,
139
+ width ,
140
+ height ,
141
+ entries )
139
142
140
143
res = calc .processCalculation ()
141
144
if res == QgsRasterCalculator .ParserError :
0 commit comments