94 changes: 94 additions & 0 deletions python/plugins/processing/gdal/ColorRelief.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
# -*- coding: utf-8 -*-

"""
***************************************************************************
ColorRelief.py
---------------------
Date : October 2013
Copyright : (C) 2013 by Alexander Bruy
Email : alexander dot bruy at gmail dot com
***************************************************************************
* *
* 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__ = 'Alexander Bruy'
__date__ = 'October 2013'
__copyright__ = '(C) 2013, Alexander Bruy'

# This will get replaced with a git SHA1 when you do a git archive

__revision__ = '$Format:%H$'


from PyQt4.QtGui import *

from processing.core.GeoAlgorithm import GeoAlgorithm
from processing.parameters.ParameterRaster import ParameterRaster
from processing.parameters.ParameterBoolean import ParameterBoolean
from processing.parameters.ParameterNumber import ParameterNumber
from processing.parameters.ParameterFile import ParameterFile
from processing.parameters.ParameterSelection import ParameterSelection
from processing.outputs.OutputRaster import OutputRaster
from processing.gdal.GdalUtils import GdalUtils
from processing.tools.system import *


class ColorRelief(GeoAlgorithm):

INPUT = 'INPUT'
BAND = 'BAND'
COMPUTE_EDGES = 'COMPUTE_EDGES'
COLOR_TABLE = 'COLOR_TABLE'
MATCH_MODE = 'MATCH_MODE'
OUTPUT = 'OUTPUT'

MATCHING_MODES = ['"0,0,0,0" RGBA', 'Exact color', 'Nearest color']

#def getIcon(self):
# filepath = os.path.dirname(__file__) + '/icons/dem.png'
# return QIcon(filepath)

def defineCharacteristics(self):
self.name = 'Color relief'
self.group = '[GDAL] Analysis'
self.addParameter(ParameterRaster(self.INPUT, 'Input layer'))
self.addParameter(ParameterNumber(self.BAND, 'Band number', 1, 99, 1))
self.addParameter(ParameterBoolean(self.COMPUTE_EDGES, 'Compute edges',
False))
self.addParameter(ParameterFile(self.COLOR_TABLE,
'Color configuration file', optional=False))
self.addParameter(ParameterSelection(self.MATCH_MODE,
'Matching mode', self.MATCHING_MODES, 0))

self.addOutput(OutputRaster(self.OUTPUT, 'Output file'))

def processAlgorithm(self, progress):
arguments = ['color-relief']
arguments.append(unicode(self.getParameterValue(self.INPUT)))
arguments.append(unicode(self.getParameterValue(self.COLOR_TABLE)))
#filePath = unicode(self.getParameterValue(self.COLOR_TABLE))
#if filePath is None or filePath == '':
# filePath = os.path.join(os.path.dirname(__file__), 'terrain.txt')
#arguments.append(filePath)
arguments.append(unicode(self.getOutputValue(self.OUTPUT)))

arguments.append('-b')
arguments.append(str(self.getParameterValue(self.BAND)))

if self.getParameterValue(self.COMPUTE_EDGES):
arguments.append('-compute_edges')

mode = self.getParameterValue(self.MATCH_MODE)
if mode == 1:
arguments.append('-exact_color_entry')
elif mode == 2:
arguments.append('-nearest_color_entry')

GdalUtils.runGdal(['gdaldem',
GdalUtils.escapeAndJoin(arguments)], progress)
14 changes: 14 additions & 0 deletions python/plugins/processing/gdal/GdalOgrAlgorithmProvider.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,17 @@
from processing.gdal.fillnodata import fillnodata
from processing.gdal.extractprojection import ExtractProjection
from processing.gdal.gdal2xyz import gdal2xyz
from processing.gdal.hillshade import hillshade
from processing.gdal.slope import slope
from processing.gdal.aspect import aspect
from processing.gdal.tri import tri
from processing.gdal.tpi import tpi
from processing.gdal.roughness import roughness
from processing.gdal.ColorRelief import ColorRelief
from processing.gdal.GridInvDist import GridInvDist
from processing.gdal.GridAverage import GridAverage
from processing.gdal.GridNearest import GridNearest
from processing.gdal.GridDataMetrics import GridDataMetrics

from processing.gdal.ogr2ogr import Ogr2Ogr
from processing.gdal.ogrinfo import OgrInfo
Expand Down Expand Up @@ -105,6 +116,9 @@ def createAlgsList(self):
rgb2pct(), pct2rgb(), merge(), polygonize(), gdaladdo(),
ClipByExtent(), ClipByMask(), contour(), rasterize(), proximity(),
sieve(), fillnodata(), ExtractProjection(), gdal2xyz(),
hillshade(), slope(), aspect(), tri(), tpi(), roughness(),
ColorRelief(), GridInvDist(), GridAverage(), GridNearest(),
GridDataMetrics(),
# ----- OGR tools -----
OgrInfo(), Ogr2Ogr(), OgrSql(),
]
Expand Down
101 changes: 101 additions & 0 deletions python/plugins/processing/gdal/GridAverage.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
# -*- coding: utf-8 -*-

"""
***************************************************************************
GridAverage.py
---------------------
Date : October 2013
Copyright : (C) 2013 by Alexander Bruy
Email : alexander dot bruy at gmail dot com
***************************************************************************
* *
* 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__ = 'Alexander Bruy'
__date__ = 'October 2013'
__copyright__ = '(C) 2013, Alexander Bruy'

# This will get replaced with a git SHA1 when you do a git archive

__revision__ = '$Format:%H$'


from PyQt4.QtGui import *

from processing.core.GeoAlgorithm import GeoAlgorithm
from processing.parameters.ParameterVector import ParameterVector
from processing.parameters.ParameterTableField import ParameterTableField
from processing.parameters.ParameterNumber import ParameterNumber
from processing.outputs.OutputRaster import OutputRaster
from processing.gdal.GdalUtils import GdalUtils
from processing.tools.system import *


class GridAverage(GeoAlgorithm):

INPUT = 'INPUT'
Z_FIELD = 'Z_FIELD'
RADIUS_1 = 'RADIUS_1'
RADIUS_2 = 'RADIUS_2'
MIN_POINTS = 'MIN_POINTS'
ANGLE = 'ANGLE'
NODATA = 'NODATA'
OUTPUT = 'OUTPUT'

#def getIcon(self):
# filepath = os.path.dirname(__file__) + '/icons/dem.png'
# return QIcon(filepath)

def defineCharacteristics(self):
self.name = 'Grid (Moving average)'
self.group = '[GDAL] Analysis'
self.addParameter(ParameterVector(self.INPUT, 'Input layer',
[ParameterVector.VECTOR_TYPE_POINT]))
self.addParameter(ParameterTableField(self.Z_FIELD, 'Z field',
self.INPUT, ParameterTableField.DATA_TYPE_NUMBER,
True))
self.addParameter(ParameterNumber(self.RADIUS_1, 'Radius 1',
0.0, 99999999.999999, 0.0))
self.addParameter(ParameterNumber(self.RADIUS_2, 'Radius 2',
0.0, 99999999.999999, 0.0))
self.addParameter(ParameterNumber(self.MIN_POINTS, 'Min points',
0.0, 99999999.999999, 0.0))
self.addParameter(ParameterNumber(self.ANGLE, 'Angle',
0.0, 359.0, 0.0))
self.addParameter(ParameterNumber(self.NODATA, 'Nodata',
0.0, 99999999.999999, 0.0))

self.addOutput(OutputRaster(self.OUTPUT, 'Output file'))

def processAlgorithm(self, progress):
arguments = ['-l']
arguments.append(
os.path.basename(os.path.splitext(
unicode(self.getParameterValue(self.INPUT)))[0]))

fieldName = self.getParameterValue(self.Z_FIELD)
if fieldName is not None and fieldName != '':
arguments.append('-zfield')
arguments.append(fieldName)

params = 'average'
params += ':radius1=%s' % self.getParameterValue(self.RADIUS_1)
params += ':radius2=%s' % self.getParameterValue(self.RADIUS_2)
params += ':angle=%s' % self.getParameterValue(self.ANGLE)
params += ':min_points=%s' % self.getParameterValue(self.MIN_POINTS)
params += ':nodata=%s' % self.getParameterValue(self.NODATA)

arguments.append('-a')
arguments.append(params)

arguments.append(unicode(self.getParameterValue(self.INPUT)))
arguments.append(unicode(self.getOutputValue(self.OUTPUT)))

GdalUtils.runGdal(['gdal_grid',
GdalUtils.escapeAndJoin(arguments)], progress)
121 changes: 121 additions & 0 deletions python/plugins/processing/gdal/GridDataMetrics.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
# -*- coding: utf-8 -*-

"""
***************************************************************************
GridDataMetrics.py
---------------------
Date : October 2013
Copyright : (C) 2013 by Alexander Bruy
Email : alexander dot bruy at gmail dot com
***************************************************************************
* *
* 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__ = 'Alexander Bruy'
__date__ = 'October 2013'
__copyright__ = '(C) 2013, Alexander Bruy'

# This will get replaced with a git SHA1 when you do a git archive

__revision__ = '$Format:%H$'


from PyQt4.QtGui import *

from processing.core.GeoAlgorithm import GeoAlgorithm
from processing.parameters.ParameterVector import ParameterVector
from processing.parameters.ParameterTableField import ParameterTableField
from processing.parameters.ParameterSelection import ParameterSelection
from processing.parameters.ParameterNumber import ParameterNumber
from processing.outputs.OutputRaster import OutputRaster
from processing.gdal.GdalUtils import GdalUtils
from processing.tools.system import *


class GridDataMetrics(GeoAlgorithm):

INPUT = 'INPUT'
Z_FIELD = 'Z_FIELD'
METRIC = 'METRIC'
RADIUS_1 = 'RADIUS_1'
RADIUS_2 = 'RADIUS_2'
MIN_POINTS = 'MIN_POINTS'
ANGLE = 'ANGLE'
NODATA = 'NODATA'
OUTPUT = 'OUTPUT'

DATA_METRICS = ['Minimum', 'Maximum', 'Range', 'Count', 'Average distance',
'Average distance between points']

#def getIcon(self):
# filepath = os.path.dirname(__file__) + '/icons/dem.png'
# return QIcon(filepath)

def defineCharacteristics(self):
self.name = 'Grid (Data metrics)'
self.group = '[GDAL] Analysis'
self.addParameter(ParameterVector(self.INPUT, 'Input layer',
[ParameterVector.VECTOR_TYPE_POINT]))
self.addParameter(ParameterTableField(self.Z_FIELD, 'Z field',
self.INPUT, ParameterTableField.DATA_TYPE_NUMBER,
True))
self.addParameter(ParameterSelection(self.METRIC, 'Metrics',
self.DATA_METRICS, 0))
self.addParameter(ParameterNumber(self.RADIUS_1, 'Radius 1',
0.0, 99999999.999999, 0.0))
self.addParameter(ParameterNumber(self.RADIUS_2, 'Radius 2',
0.0, 99999999.999999, 0.0))
self.addParameter(ParameterNumber(self.MIN_POINTS, 'Min points',
0.0, 99999999.999999, 0.0))
self.addParameter(ParameterNumber(self.ANGLE, 'Angle',
0.0, 359.0, 0.0))
self.addParameter(ParameterNumber(self.NODATA, 'Nodata',
0.0, 99999999.999999, 0.0))

self.addOutput(OutputRaster(self.OUTPUT, 'Output file'))

def processAlgorithm(self, progress):
arguments = ['-l']
arguments.append(
os.path.basename(os.path.splitext(
unicode(self.getParameterValue(self.INPUT)))[0]))

fieldName = self.getParameterValue(self.Z_FIELD)
if fieldName is not None and fieldName != '':
arguments.append('-zfield')
arguments.append(fieldName)

metric = self.getParameterValue(self.METRIC)
if metric == 0:
params = 'minimum'
elif metric == 1:
params = 'maximum'
elif metric == 2:
params = 'range'
elif metric == 3:
params = 'count'
elif metric == 4:
params = 'average_distance'
elif metric == 5:
params = 'average_distance_pts'

params += ':radius1=%s' % self.getParameterValue(self.RADIUS_1)
params += ':radius2=%s' % self.getParameterValue(self.RADIUS_2)
params += ':angle=%s' % self.getParameterValue(self.ANGLE)
params += ':min_points=%s' % self.getParameterValue(self.MIN_POINTS)
params += ':nodata=%s' % self.getParameterValue(self.NODATA)

arguments.append('-a')
arguments.append(params)

arguments.append(unicode(self.getParameterValue(self.INPUT)))
arguments.append(unicode(self.getOutputValue(self.OUTPUT)))

GdalUtils.runGdal(['gdal_grid',
GdalUtils.escapeAndJoin(arguments)], progress)
Loading