From ac5d284382487469b91c438fb5732d90a3dfa064 Mon Sep 17 00:00:00 2001 From: Giovanni Manghi Date: Fri, 6 Feb 2015 11:29:29 +0000 Subject: [PATCH 1/3] add gdal raster calculator to processing --- .../plugins/processing/algs/gdal/GdalOgrAlgorithmProvider.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/python/plugins/processing/algs/gdal/GdalOgrAlgorithmProvider.py b/python/plugins/processing/algs/gdal/GdalOgrAlgorithmProvider.py index 0d771a58190a..a578f57ec2a8 100644 --- a/python/plugins/processing/algs/gdal/GdalOgrAlgorithmProvider.py +++ b/python/plugins/processing/algs/gdal/GdalOgrAlgorithmProvider.py @@ -64,6 +64,7 @@ from GridAverage import GridAverage from GridNearest import GridNearest from GridDataMetrics import GridDataMetrics +from GdalRasterCalc import GdalRasterCalc from ogr2ogr import Ogr2Ogr from ogr2ogrclip import Ogr2OgrClip @@ -121,7 +122,7 @@ def createAlgsList(self): sieve(), fillnodata(), ExtractProjection(), gdal2xyz(), hillshade(), slope(), aspect(), tri(), tpi(), roughness(), ColorRelief(), GridInvDist(), GridAverage(), GridNearest(), - GridDataMetrics(), + GridDataMetrics(), GdalRasterCalc(), # ----- OGR tools ----- OgrInfo(), Ogr2Ogr(), Ogr2OgrClip(), Ogr2OgrClipExtent(), Ogr2OgrToPostGis(), Ogr2OgrToPostGisList(), OgrSql(), From 67e4a9a1702366e37891fafbac7f0712a1c38ac5 Mon Sep 17 00:00:00 2001 From: Giovanni Manghi Date: Fri, 6 Feb 2015 11:29:44 +0000 Subject: [PATCH 2/3] add missing file --- .../processing/algs/gdal/GdalRasterCalc.py | 163 ++++++++++++++++++ 1 file changed, 163 insertions(+) create mode 100644 python/plugins/processing/algs/gdal/GdalRasterCalc.py diff --git a/python/plugins/processing/algs/gdal/GdalRasterCalc.py b/python/plugins/processing/algs/gdal/GdalRasterCalc.py new file mode 100644 index 000000000000..cb8401610948 --- /dev/null +++ b/python/plugins/processing/algs/gdal/GdalRasterCalc.py @@ -0,0 +1,163 @@ +# -*- coding: utf-8 -*- + +""" +*************************************************************************** + GdalRasterCalc.py + --------------------- + Date : Janaury 2015 + Copyright : (C) 2015 by Giovanni Manghi + Email : giovanni dot manghi at naturalgis dot pt +*************************************************************************** +* * +* 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__ = 'Giovanni Manghi' +__date__ = 'January 2015' +__copyright__ = '(C) 2015, Giovanni Manghi' + +# This will get replaced with a git SHA1 when you do a git archive + +__revision__ = '$Format:%H$' + +from processing.algs.gdal.GdalAlgorithm import GdalAlgorithm +from processing.core.parameters import ParameterString +from processing.core.parameters import ParameterRaster +from processing.core.parameters import ParameterNumber +from processing.core.parameters import ParameterBoolean +from processing.core.parameters import ParameterSelection +from processing.core.parameters import ParameterExtent +from processing.core.parameters import ParameterCrs +from processing.core.outputs import OutputRaster + +from processing.tools.system import isWindows + +from processing.algs.gdal.GdalUtils import GdalUtils + +class GdalRasterCalc(GdalAlgorithm): + + INPUT_A = 'INPUT_A' + INPUT_B = 'INPUT_B' + INPUT_C = 'INPUT_C' + INPUT_D = 'INPUT_D' + INPUT_E = 'INPUT_E' + INPUT_F = 'INPUT_F' + BAND_A = 'BAND_A' + BAND_B = 'BAND_B' + BAND_C = 'BAND_C' + BAND_D = 'BAND_D' + BAND_E = 'BAND_E' + BAND_F = 'BAND_F' + FORMULA = 'FORMULA' + OUTPUT = 'OUTPUT' + NO_DATA = 'NO_DATA' + EXTRA = 'EXTRA' + RTYPE = 'RTYPE' + TYPE = ['Byte', 'Int16', 'UInt16', 'UInt32', 'Int32', 'Float32', 'Float64'] + #DEBUG = 'DEBUG' + + def defineCharacteristics(self): + self.name = 'GDAL Raster Calculator' + self.group = '[GDAL] Miscellaneous' + self.addParameter(ParameterRaster(self.INPUT_A, self.tr('Input layer A'), + False)) + self.addParameter(ParameterString(self.BAND_A, + self.tr('Number of raster band for raster A'), '1', optional=True)) + self.addParameter(ParameterRaster(self.INPUT_B, self.tr('Input layer B'), + True)) + self.addParameter(ParameterString(self.BAND_B, + self.tr('Number of raster band for raster B'), '1', optional=True)) + self.addParameter(ParameterRaster(self.INPUT_C, self.tr('Input layer C'), + True)) + self.addParameter(ParameterString(self.BAND_C, + self.tr('Number of raster band for raster C'), '1', optional=True)) + self.addParameter(ParameterRaster(self.INPUT_D, self.tr('Input layer D'), + True)) + self.addParameter(ParameterString(self.BAND_D, + self.tr('Number of raster band for raster D'), '1', optional=True)) + self.addParameter(ParameterRaster(self.INPUT_E, self.tr('Input layer E'), + True)) + self.addParameter(ParameterString(self.BAND_E, + self.tr('Number of raster band for raster E'), '1', optional=True)) + self.addParameter(ParameterRaster(self.INPUT_F, self.tr('Input layer F'), + True)) + self.addParameter(ParameterString(self.BAND_F, + self.tr('Number of raster band for raster F'), '1', optional=True)) + self.addParameter(ParameterString(self.FORMULA, + self.tr('Calculation in gdalnumeric syntax using +-/* or any numpy array functions (i.e. logical_and())'), 'A*2', optional=False)) + self.addParameter(ParameterString(self.NO_DATA, + self.tr("Set output nodata value"), + '-9999')) + self.addParameter(ParameterSelection(self.RTYPE, + self.tr('Output raster type'), self.TYPE, 5)) + #self.addParameter(ParameterBoolean(self.DEBUG, + #self.tr('Print debugging information'), + #False)) + self.addParameter(ParameterString(self.EXTRA, + self.tr('Additional creation parameters'), '', optional=True)) + self.addOutput(OutputRaster(self.OUTPUT, self.tr('Output layer'))) + + def processAlgorithm(self, progress): + out = self.getOutputValue(self.OUTPUT) + extra = str(self.getParameterValue(self.EXTRA)) + #debug = self.getParameterValue(self.DEBUG) + formula = self.getParameterValue(self.FORMULA) + noData = str(self.getParameterValue(self.NO_DATA)) + + arguments = [] + arguments.append('--calc') + arguments.append('"'+formula+'"') + arguments.append('--format') + arguments.append(GdalUtils.getFormatShortNameFromFilename(out)) + arguments.append('--type') + arguments.append(self.TYPE[self.getParameterValue(self.RTYPE)]) + if len(noData) > 0: + arguments.append('--NoDataValue') + arguments.append(noData) + if len(extra) > 0: + arguments.append(extra) + #if debug is True: + #arguments.append('--debug') + arguments.append('-A') + arguments.append(self.getParameterValue(self.INPUT_A)) + if self.getParameterValue(self.BAND_A): + arguments.append('--A_band '+self.getParameterValue(self.BAND_A)) + if self.getParameterValue(self.INPUT_B): + arguments.append('-B') + arguments.append(self.getParameterValue(self.INPUT_B)) + if self.getParameterValue(self.BAND_B): + arguments.append('--B_band '+self.getParameterValue(self.BAND_B)) + if self.getParameterValue(self.INPUT_C): + arguments.append('-C') + arguments.append(self.getParameterValue(self.INPUT_C)) + if self.getParameterValue(self.BAND_C): + arguments.append('--C_band '+self.getParameterValue(self.BAND_C)) + if self.getParameterValue(self.INPUT_D): + arguments.append('-D') + arguments.append(self.getParameterValue(self.INPUT_D)) + if self.getParameterValue(self.BAND_D): + arguments.append('--D_band '+self.getParameterValue(self.BAND_D)) + if self.getParameterValue(self.INPUT_E): + arguments.append('-E') + arguments.append(self.getParameterValue(self.INPUT_E)) + if self.getParameterValue(self.BAND_E): + arguments.append('--E_band '+self.getParameterValue(self.BAND_E)) + if self.getParameterValue(self.INPUT_F): + arguments.append('-F') + arguments.append(self.getParameterValue(self.INPUT_F)) + if self.getParameterValue(self.BAND_F): + arguments.append('--F_band '+self.getParameterValue(self.BAND_F)) + arguments.append('--outfile') + arguments.append(out) + + if isWindows(): + GdalUtils.runGdal(['gdal_calc', + GdalUtils.escapeAndJoin(arguments)], progress) + else: + GdalUtils.runGdal(['gdal_calc.py', + GdalUtils.escapeAndJoin(arguments)], progress) From 5260ef3992381559410aff87bf25909ca9c04ea6 Mon Sep 17 00:00:00 2001 From: Alexander Bruy Date: Tue, 24 Feb 2015 11:25:50 +0200 Subject: [PATCH 3/3] unify algorithm name and source file name, formatting fixes --- .../algs/gdal/GdalOgrAlgorithmProvider.py | 4 +- .../gdal/{GdalRasterCalc.py => gdalcalc.py} | 70 +++++++++---------- 2 files changed, 35 insertions(+), 39 deletions(-) rename python/plugins/processing/algs/gdal/{GdalRasterCalc.py => gdalcalc.py} (74%) diff --git a/python/plugins/processing/algs/gdal/GdalOgrAlgorithmProvider.py b/python/plugins/processing/algs/gdal/GdalOgrAlgorithmProvider.py index 4ace8aef34cc..5582a00a31fa 100644 --- a/python/plugins/processing/algs/gdal/GdalOgrAlgorithmProvider.py +++ b/python/plugins/processing/algs/gdal/GdalOgrAlgorithmProvider.py @@ -65,7 +65,7 @@ from GridNearest import GridNearest from GridDataMetrics import GridDataMetrics from gdaltindex import gdaltindex -from GdalRasterCalc import GdalRasterCalc +from gdalcalc import gdalcalc from ogr2ogr import Ogr2Ogr from ogr2ogrclip import Ogr2OgrClip @@ -123,7 +123,7 @@ def createAlgsList(self): sieve(), fillnodata(), ExtractProjection(), gdal2xyz(), hillshade(), slope(), aspect(), tri(), tpi(), roughness(), ColorRelief(), GridInvDist(), GridAverage(), GridNearest(), - GridDataMetrics(), gdaltindex(), GdalRasterCalc(), + GridDataMetrics(), gdaltindex(), gdalcalc(), # ----- OGR tools ----- OgrInfo(), Ogr2Ogr(), Ogr2OgrClip(), Ogr2OgrClipExtent(), Ogr2OgrToPostGis(), Ogr2OgrToPostGisList(), OgrSql(), diff --git a/python/plugins/processing/algs/gdal/GdalRasterCalc.py b/python/plugins/processing/algs/gdal/gdalcalc.py similarity index 74% rename from python/plugins/processing/algs/gdal/GdalRasterCalc.py rename to python/plugins/processing/algs/gdal/gdalcalc.py index cb8401610948..450100f393e2 100644 --- a/python/plugins/processing/algs/gdal/GdalRasterCalc.py +++ b/python/plugins/processing/algs/gdal/gdalcalc.py @@ -2,7 +2,7 @@ """ *************************************************************************** - GdalRasterCalc.py + gdalcalc.py --------------------- Date : Janaury 2015 Copyright : (C) 2015 by Giovanni Manghi @@ -39,14 +39,14 @@ from processing.algs.gdal.GdalUtils import GdalUtils -class GdalRasterCalc(GdalAlgorithm): +class gdalcalc(GdalAlgorithm): INPUT_A = 'INPUT_A' INPUT_B = 'INPUT_B' INPUT_C = 'INPUT_C' INPUT_D = 'INPUT_D' INPUT_E = 'INPUT_E' - INPUT_F = 'INPUT_F' + INPUT_F = 'INPUT_F' BAND_A = 'BAND_A' BAND_B = 'BAND_B' BAND_C = 'BAND_C' @@ -62,42 +62,40 @@ class GdalRasterCalc(GdalAlgorithm): #DEBUG = 'DEBUG' def defineCharacteristics(self): - self.name = 'GDAL Raster Calculator' + self.name = 'Raster calculator' self.group = '[GDAL] Miscellaneous' - self.addParameter(ParameterRaster(self.INPUT_A, self.tr('Input layer A'), - False)) + self.addParameter(ParameterRaster( + self.INPUT_A, self.tr('Input layer A'), False)) self.addParameter(ParameterString(self.BAND_A, self.tr('Number of raster band for raster A'), '1', optional=True)) - self.addParameter(ParameterRaster(self.INPUT_B, self.tr('Input layer B'), - True)) + self.addParameter(ParameterRaster( + self.INPUT_B, self.tr('Input layer B'), True)) self.addParameter(ParameterString(self.BAND_B, self.tr('Number of raster band for raster B'), '1', optional=True)) - self.addParameter(ParameterRaster(self.INPUT_C, self.tr('Input layer C'), - True)) + self.addParameter(ParameterRaster( + self.INPUT_C, self.tr('Input layer C'), True)) self.addParameter(ParameterString(self.BAND_C, self.tr('Number of raster band for raster C'), '1', optional=True)) - self.addParameter(ParameterRaster(self.INPUT_D, self.tr('Input layer D'), - True)) + self.addParameter(ParameterRaster( + self.INPUT_D, self.tr('Input layer D'), True)) self.addParameter(ParameterString(self.BAND_D, self.tr('Number of raster band for raster D'), '1', optional=True)) - self.addParameter(ParameterRaster(self.INPUT_E, self.tr('Input layer E'), - True)) + self.addParameter(ParameterRaster( + self.INPUT_E, self.tr('Input layer E'), True)) self.addParameter(ParameterString(self.BAND_E, self.tr('Number of raster band for raster E'), '1', optional=True)) - self.addParameter(ParameterRaster(self.INPUT_F, self.tr('Input layer F'), - True)) + self.addParameter(ParameterRaster( + self.INPUT_F, self.tr('Input layer F'), True)) self.addParameter(ParameterString(self.BAND_F, self.tr('Number of raster band for raster F'), '1', optional=True)) self.addParameter(ParameterString(self.FORMULA, self.tr('Calculation in gdalnumeric syntax using +-/* or any numpy array functions (i.e. logical_and())'), 'A*2', optional=False)) self.addParameter(ParameterString(self.NO_DATA, - self.tr("Set output nodata value"), - '-9999')) + self.tr('Set output nodata value'), '-9999')) self.addParameter(ParameterSelection(self.RTYPE, self.tr('Output raster type'), self.TYPE, 5)) - #self.addParameter(ParameterBoolean(self.DEBUG, - #self.tr('Print debugging information'), - #False)) + #self.addParameter(ParameterBoolean( + # self.DEBUG, self.tr('Print debugging information'), False)) self.addParameter(ParameterString(self.EXTRA, self.tr('Additional creation parameters'), '', optional=True)) self.addOutput(OutputRaster(self.OUTPUT, self.tr('Output layer'))) @@ -108,11 +106,11 @@ def processAlgorithm(self, progress): #debug = self.getParameterValue(self.DEBUG) formula = self.getParameterValue(self.FORMULA) noData = str(self.getParameterValue(self.NO_DATA)) - + arguments = [] arguments.append('--calc') - arguments.append('"'+formula+'"') - arguments.append('--format') + arguments.append('"' + formula + '"') + arguments.append('--format') arguments.append(GdalUtils.getFormatShortNameFromFilename(out)) arguments.append('--type') arguments.append(self.TYPE[self.getParameterValue(self.RTYPE)]) @@ -120,44 +118,42 @@ def processAlgorithm(self, progress): arguments.append('--NoDataValue') arguments.append(noData) if len(extra) > 0: - arguments.append(extra) - #if debug is True: - #arguments.append('--debug') + arguments.append(extra) + #if debug: + # arguments.append('--debug') arguments.append('-A') arguments.append(self.getParameterValue(self.INPUT_A)) if self.getParameterValue(self.BAND_A): - arguments.append('--A_band '+self.getParameterValue(self.BAND_A)) + arguments.append('--A_band ' + self.getParameterValue(self.BAND_A)) if self.getParameterValue(self.INPUT_B): arguments.append('-B') arguments.append(self.getParameterValue(self.INPUT_B)) if self.getParameterValue(self.BAND_B): - arguments.append('--B_band '+self.getParameterValue(self.BAND_B)) + arguments.append('--B_band ' + self.getParameterValue(self.BAND_B)) if self.getParameterValue(self.INPUT_C): arguments.append('-C') arguments.append(self.getParameterValue(self.INPUT_C)) if self.getParameterValue(self.BAND_C): - arguments.append('--C_band '+self.getParameterValue(self.BAND_C)) + arguments.append('--C_band ' + self.getParameterValue(self.BAND_C)) if self.getParameterValue(self.INPUT_D): arguments.append('-D') arguments.append(self.getParameterValue(self.INPUT_D)) if self.getParameterValue(self.BAND_D): - arguments.append('--D_band '+self.getParameterValue(self.BAND_D)) + arguments.append('--D_band ' + self.getParameterValue(self.BAND_D)) if self.getParameterValue(self.INPUT_E): arguments.append('-E') arguments.append(self.getParameterValue(self.INPUT_E)) if self.getParameterValue(self.BAND_E): - arguments.append('--E_band '+self.getParameterValue(self.BAND_E)) + arguments.append('--E_band ' + self.getParameterValue(self.BAND_E)) if self.getParameterValue(self.INPUT_F): arguments.append('-F') arguments.append(self.getParameterValue(self.INPUT_F)) if self.getParameterValue(self.BAND_F): - arguments.append('--F_band '+self.getParameterValue(self.BAND_F)) + arguments.append('--F_band ' + self.getParameterValue(self.BAND_F)) arguments.append('--outfile') arguments.append(out) if isWindows(): - GdalUtils.runGdal(['gdal_calc', - GdalUtils.escapeAndJoin(arguments)], progress) + GdalUtils.runGdal(['gdal_calc', GdalUtils.escapeAndJoin(arguments)], progress) else: - GdalUtils.runGdal(['gdal_calc.py', - GdalUtils.escapeAndJoin(arguments)], progress) + GdalUtils.runGdal(['gdal_calc.py', GdalUtils.escapeAndJoin(arguments)], progress)