From 43b39efd73cb907a6abd8e89a43a9a37c5fdd7ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A9d=C3=A9ric=20Ribreux?= Date: Wed, 10 Feb 2016 21:01:51 +0100 Subject: [PATCH 1/2] [Processing] Add GRASS7 r.reclass inline rules (implements Redmine #5583) --- .../algs/grass7/description/r.reclass.txt | 1 + .../processing/algs/grass7/ext/r_reclass.py | 50 +++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 python/plugins/processing/algs/grass7/ext/r_reclass.py diff --git a/python/plugins/processing/algs/grass7/description/r.reclass.txt b/python/plugins/processing/algs/grass7/description/r.reclass.txt index 26749927de9..70674ecb8d7 100644 --- a/python/plugins/processing/algs/grass7/description/r.reclass.txt +++ b/python/plugins/processing/algs/grass7/description/r.reclass.txt @@ -3,4 +3,5 @@ Creates a new map layer whose category values are based upon a reclassification Raster (r.*) ParameterRaster|input|Input raster layer|False ParameterFile|rules|File containing reclass rules|- +ParameterString|txtrules|Reclass rules text (if rule file not used)|None|True|True OutputRaster|output|Reclassified diff --git a/python/plugins/processing/algs/grass7/ext/r_reclass.py b/python/plugins/processing/algs/grass7/ext/r_reclass.py new file mode 100644 index 00000000000..a369adbb2c7 --- /dev/null +++ b/python/plugins/processing/algs/grass7/ext/r_reclass.py @@ -0,0 +1,50 @@ +# -*- coding: utf-8 -*- + +""" +*************************************************************************** + r_reclass.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$' + + +def checkParameterValuesBeforeExecuting(alg): + """ Verify if we have the right parameters """ + if alg.getParameterValue(u'rules') and alg.getParameterValue(u'txtrules'): + return alg.tr("You need to set either a rules file or write directly the rules !") + + return None + + +def processCommand(alg): + """ Handle inline rules """ + txtRules = alg.getParameterValue(u'txtrules') + if txtRules: + raster = alg.getParameterValue(u'input') + output = alg.getOutputFromName(u'output') + alg.exportedLayers[output.value] = output.name + alg.uniqueSufix + if raster: + raster = alg.exportedLayers[raster] + command = u"echo \"{}\" | r.reclass input={} rules=- output={} --overwrite".format( + txtRules, raster, output.name + alg.uniqueSufix) + alg.commands.append(command) + else: + alg.processCommand() From b780d7caf1c7676277d48cef909664cf38fa29ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A9d=C3=A9ric=20Ribreux?= Date: Thu, 11 Feb 2016 20:41:38 +0100 Subject: [PATCH 2/2] r.reclass inline rules also for MS-Windows --- .../plugins/processing/algs/grass7/ext/r_reclass.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/python/plugins/processing/algs/grass7/ext/r_reclass.py b/python/plugins/processing/algs/grass7/ext/r_reclass.py index a369adbb2c7..8f07bdc01e0 100644 --- a/python/plugins/processing/algs/grass7/ext/r_reclass.py +++ b/python/plugins/processing/algs/grass7/ext/r_reclass.py @@ -38,13 +38,20 @@ def processCommand(alg): """ Handle inline rules """ txtRules = alg.getParameterValue(u'txtrules') if txtRules: + # Creates a temporary txt file + tempRulesName = alg.getTempFilename() + + # Inject rules into temporary txt file + with open(tempRulesName, "w") as tempRules: + tempRules.write(txtRules) + raster = alg.getParameterValue(u'input') output = alg.getOutputFromName(u'output') alg.exportedLayers[output.value] = output.name + alg.uniqueSufix if raster: raster = alg.exportedLayers[raster] - command = u"echo \"{}\" | r.reclass input={} rules=- output={} --overwrite".format( - txtRules, raster, output.name + alg.uniqueSufix) + command = u"r.reclass input={} rules=- output={} --overwrite < {}".format( + raster, output.name + alg.uniqueSufix, tempRulesName) alg.commands.append(command) else: alg.processCommand()