@@ -263,34 +263,42 @@ def defineCharacteristicsFromFile(self):
263
263
self .params .append (param )
264
264
265
265
def getDefaultCellSize (self , parameters , context ):
266
+ """
267
+ Determine a default cell size from all the raster layers.
268
+ """
269
+ if self .cellSize :
270
+ return True
271
+
266
272
cellsize = 0
267
- for param in self .parameterDefinitions ():
268
- if param . name () in parameters :
269
- value = parameters [ param . name ( )]
270
- if isinstance ( param , QgsProcessingParameterRasterLayer ):
271
- layer = self . parameterAsExtent ( parameters , paramName , context )
272
- #if isinstance(value, QgsRasterLayer) :
273
- # layer = value
274
- #else :
275
- # layer = QgsProcessingUtils.mapLayerFromString(param.value , context)
276
- cellsize = max (cellsize , (layer .extent ().xMaximum () -
277
- layer .extent ().xMinimum ()) /
278
- layer .width ())
279
- elif isinstance ( param , QgsProcessingParameterMultipleLayers ):
280
- # TODO: finish
281
- layers = value . split ( ';' )
282
- for layername in layers :
283
- layer = QgsProcessingUtils . mapLayerFromString ( layername , context )
284
- if isinstance (layer , QgsRasterLayer ):
285
- cellsize = max (cellsize , (
286
- layer .extent ().xMaximum () -
287
- layer .extent ().xMinimum ()) /
288
- layer .width ()
289
- )
290
-
273
+ parameters = [ p for p in self .parameterDefinitions ()
274
+ if isinstance ( p , ( QgsProcessingParameterRasterLayer ,
275
+ QgsProcessingParameterMultipleLayers ) )]
276
+ cz = lambda l , cellsize : max ( cellsize , ( l . extent (). xMaximum () - l . extent (). xMinimum ()) / l . width ())
277
+
278
+ for param in parameters :
279
+ paramName = param . name ()
280
+ if isinstance ( param , QgsProcessingParameterRasterLayer ) :
281
+ layer = self . parameterAsExtent ( parameters , paramName , context )
282
+ cellsize = max (cellsize , (layer .extent ().xMaximum () -
283
+ layer .extent ().xMinimum ()) /
284
+ layer .width ())
285
+ #cellsize = cz(layer, cellsize)
286
+ elif isinstance ( param , QgsProcessingParameterMultipleLayers ):
287
+ layers = self . parameterAsLayerList ( parameters , paramName , context )
288
+ for layer in layers :
289
+ if layer . type () == QgsMapLayer . RasterLayer :
290
+ #cellsize = cz (layer, cellsize)
291
+ cellsize = max (cellsize , (
292
+ layer .extent ().xMaximum () -
293
+ layer .extent ().xMinimum ()) /
294
+ layer .width () )
295
+
296
+ QgsMessageLog . logMessage ( 'cellSize: {}' . format ( cellsize ), 'Grass7' , QgsMessageLog . INFO )
291
297
if cellsize == 0 :
292
- cellsize = 100
293
- return cellsize
298
+ return False
299
+ else :
300
+ self .cellSize = cellsize
301
+ return True
294
302
295
303
def grabDefaultGrassParameters (self , parameters , context ):
296
304
"""
@@ -475,10 +483,11 @@ def processInputs(self, parameters, context):
475
483
self .region .yMaximum (), self .region .yMinimum (),
476
484
self .region .xMaximum (), self .region .xMinimum ()
477
485
)
478
- # TODO Handle cell size
479
- #if not self.cellSize:
480
- # self.cellSize = self.getDefaultCellSize(parameters, context)
481
- #command += ' res={}'.format(self.cellSize)
486
+ # Handle cell size
487
+ if self .getDefaultCellSize (parameters , context ):
488
+ command += ' res={}' .format (self .cellSize )
489
+
490
+ # Handle align to resolution
482
491
if self .alignToResolution :
483
492
command += ' -a'
484
493
0 commit comments