Skip to content

Commit f32bba4

Browse files
author
Médéric Ribreux
committedNov 4, 2017
(WIP) better cellsize suport
1 parent f0da7b0 commit f32bba4

File tree

1 file changed

+39
-30
lines changed

1 file changed

+39
-30
lines changed
 

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

Lines changed: 39 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -263,34 +263,42 @@ def defineCharacteristicsFromFile(self):
263263
self.params.append(param)
264264

265265
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+
266272
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)
291297
if cellsize == 0:
292-
cellsize = 100
293-
return cellsize
298+
return False
299+
else:
300+
self.cellSize = cellsize
301+
return True
294302

295303
def grabDefaultGrassParameters(self, parameters, context):
296304
"""
@@ -475,10 +483,11 @@ def processInputs(self, parameters, context):
475483
self.region.yMaximum(), self.region.yMinimum(),
476484
self.region.xMaximum(), self.region.xMinimum()
477485
)
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
482491
if self.alignToResolution:
483492
command += ' -a'
484493

0 commit comments

Comments
 (0)
Please sign in to comment.