mirror of
https://github.com/qgis/QGIS.git
synced 2025-02-25 00:58:06 -05:00
Add r.mapcalc algorithm
This commit is contained in:
parent
78024368dd
commit
0119646bd3
@ -0,0 +1,9 @@
|
||||
r.mapcalc
|
||||
Raster map calculator.
|
||||
Raster (r.*)
|
||||
ParameterMultipleInput|maps|Raster maps used in the calculator|3|True
|
||||
ParameterString|expression|Expression to evaluate. The raster names used in expression should be the same than in QGIS|None|True|True
|
||||
ParameterFile|file|File containing expression(s) to evaluate (same rule for raster names than above)|True
|
||||
ParameterString|seed|Integer seed for rand() function|None|False|True
|
||||
*ParameterBoolean|-s|Generate random seed (result is non-deterministic)|False
|
||||
OutputDirectory|output_dir|Results Directory
|
94
python/plugins/processing/algs/grass7/ext/r_mapcalc.py
Normal file
94
python/plugins/processing/algs/grass7/ext/r_mapcalc.py
Normal file
@ -0,0 +1,94 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"""
|
||||
***************************************************************************
|
||||
r_mapcalc.py
|
||||
------------
|
||||
Date : February 2016
|
||||
Copyright : (C) 2016 by Médéric Ribreux
|
||||
Email : medspx at medspx dot fr
|
||||
***************************************************************************
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
***************************************************************************
|
||||
"""
|
||||
|
||||
__author__ = 'Médéric Ribreux'
|
||||
__date__ = 'February 2016'
|
||||
__copyright__ = '(C) 2016, Médéric Ribreux'
|
||||
|
||||
# This will get replaced with a git SHA1 when you do a git archive
|
||||
|
||||
__revision__ = '$Format:%H$'
|
||||
|
||||
from os import path
|
||||
|
||||
|
||||
def checkParameterValuesBeforeExecuting(alg):
|
||||
""" Verify if we have the right parameters """
|
||||
if alg.getParameterValue('expression') and alg.getParameterValue('file'):
|
||||
return alg.tr("You need to set either inline expression or a rules file !")
|
||||
|
||||
return None
|
||||
|
||||
|
||||
def processInputs(alg):
|
||||
# We need to use the same raster names than in QGIS
|
||||
if alg.getParameterValue('maps'):
|
||||
rasters = alg.getParameterValue('maps').split(',')
|
||||
for raster in rasters:
|
||||
if raster in alg.exportedLayers.keys():
|
||||
continue
|
||||
|
||||
alg.setSessionProjectionFromLayer(raster, alg.commands)
|
||||
destFilename = path.splitext(path.basename(raster))[0]
|
||||
alg.exportedLayers[raster] = destFilename
|
||||
command = 'r.in.gdal input={} output={} --overwrite -o'.format(raster, destFilename)
|
||||
alg.commands.append(command)
|
||||
|
||||
alg.setSessionProjectionFromProject(alg.commands)
|
||||
|
||||
region = unicode(alg.getParameterValue(alg.GRASS_REGION_EXTENT_PARAMETER))
|
||||
regionCoords = region.split(',')
|
||||
command = 'g.region'
|
||||
command += ' -a'
|
||||
command += ' n=' + unicode(regionCoords[3])
|
||||
command += ' s=' + unicode(regionCoords[2])
|
||||
command += ' e=' + unicode(regionCoords[1])
|
||||
command += ' w=' + unicode(regionCoords[0])
|
||||
cellsize = alg.getParameterValue(alg.GRASS_REGION_CELLSIZE_PARAMETER)
|
||||
if cellsize:
|
||||
command += ' res=' + unicode(cellsize)
|
||||
else:
|
||||
command += ' res=' + unicode(alg.getDefaultCellsize())
|
||||
alignToResolution = alg.getParameterValue(alg.GRASS_REGION_ALIGN_TO_RESOLUTION)
|
||||
if alignToResolution:
|
||||
command += ' -a'
|
||||
alg.commands.append(command)
|
||||
|
||||
|
||||
def processCommand(alg):
|
||||
# Remove output for command
|
||||
output_dir = alg.getOutputFromName('output_dir')
|
||||
maps = alg.getParameterFromName('maps')
|
||||
alg.removeOutputFromName('output_dir')
|
||||
alg.parameters.remove(maps)
|
||||
alg.processCommand()
|
||||
alg.addOutput(output_dir)
|
||||
alg.addParameter(maps)
|
||||
|
||||
|
||||
def processOutputs(alg):
|
||||
# Export everything into Output Directory with shell commands
|
||||
outputDir = alg.getOutputValue('output_dir')
|
||||
|
||||
# Get the list of rasters matching the basename
|
||||
commands = ["for r in $(g.list type=rast); do"]
|
||||
commands.append(" r.out.gdal input=${{r}} output={}/${{r}}.tif createopt=\"TFW=YES,COMPRESS=LZW\" --overwrite".format(outputDir))
|
||||
commands.append("done")
|
||||
alg.commands.extend(commands)
|
||||
alg.outputCommands.extend(commands)
|
Loading…
x
Reference in New Issue
Block a user