@@ -97,7 +97,7 @@ def evaluateForModeler(self, value, model):
97
97
self .addParameter (ParameterRasterCalculatorExpression (self .EXPRESSION , self .tr ('Expression' ),
98
98
multiLine = True ))
99
99
self .addParameter (QgsProcessingParameterMultipleLayers (self .LAYERS ,
100
- self .tr ('Reference layer(s) (used for automated determination extent and cellsize )' ),
100
+ self .tr ('Reference layer(s) (used for automated extent, cellsize, and CRS )' ),
101
101
layerType = QgsProcessing .TypeRaster ,
102
102
optional = True ))
103
103
self .addParameter (QgsProcessingParameterNumber (self .CELLSIZE ,
@@ -107,7 +107,7 @@ def evaluateForModeler(self, value, model):
107
107
self .addParameter (QgsProcessingParameterExtent (self .EXTENT ,
108
108
self .tr ('Output extent' ),
109
109
optional = True ))
110
- self .addParameter (QgsProcessingParameterCrs (self .CRS , 'Output CRS' , 'ProjectCrs' ))
110
+ self .addParameter (QgsProcessingParameterCrs (self .CRS , 'Output CRS' , optional = True ))
111
111
self .addParameter (QgsProcessingParameterRasterDestination (self .OUTPUT , self .tr ('Output' )))
112
112
113
113
def name (self ):
@@ -119,22 +119,34 @@ def displayName(self):
119
119
def processAlgorithm (self , parameters , context , feedback ):
120
120
expression = self .parameterAsString (parameters , self .EXPRESSION , context )
121
121
layers = self .parameterAsLayerList (parameters , self .LAYERS , context )
122
- crs = self .parameterAsCrs (parameters , self .CRS , context )
123
122
124
123
layersDict = {}
125
124
if layers :
126
125
layersDict = {os .path .basename (lyr .source ().split ("." )[0 ]): lyr for lyr in layers }
127
126
127
+ crs = self .parameterAsCrs (parameters , self .CRS , context )
128
+ if not layers and not crs .isValid ():
129
+ raise QgsProcessingException (self .tr ("No reference layer selected nor CRS provided" ))
130
+
131
+ if not crs .isValid () and layers :
132
+ crs = list (layersDict .values ())[0 ].crs ()
133
+
128
134
bbox = self .parameterAsExtent (parameters , self .EXTENT , context )
129
135
if not layers and bbox .isNull ():
130
- raise QgsProcessingException (self .tr ("No reference layer selected to automate extent box" ))
136
+ raise QgsProcessingException (self .tr ("No reference layer selected nor extent box provided" ))
137
+
138
+ if not bbox .isNull ():
139
+ bboxCrs = self .parameterAsExtentCrs (parameters , self .EXTENT , context )
140
+ if bboxCrs != crs :
141
+ transform = QgsCoordinateTransform (bboxCrs , crs , context .project ())
142
+ bbox = transform .transformBoundingBox (bbox )
131
143
132
144
if bbox .isNull () and layers :
133
145
bbox = QgsProcessingUtils .combineLayerExtents (layers , crs )
134
146
135
147
cellsize = self .parameterAsDouble (parameters , self .CELLSIZE , context )
136
148
if not layers and cellsize == 0 :
137
- raise QgsProcessingException (self .tr ("No reference layer selected to automate cellsize value" ))
149
+ raise QgsProcessingException (self .tr ("No reference layer selected nor cellsize value provided " ))
138
150
139
151
def _cellsize (layer ):
140
152
ext = layer .extent ()
0 commit comments