Skip to content

Commit e8e36e6

Browse files
committedOct 13, 2013
[processing] add gdal interpolation (invdist) algorithm (addresses #7201)
1 parent 273caa6 commit e8e36e6

File tree

2 files changed

+114
-1
lines changed

2 files changed

+114
-1
lines changed
 

‎python/plugins/processing/gdal/GdalOgrAlgorithmProvider.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@
6161
from processing.gdal.tpi import tpi
6262
from processing.gdal.roughness import roughness
6363
from processing.gdal.ColorRelief import ColorRelief
64+
from processing.gdal.GridInvDist import GridInvDist
6465

6566
from processing.gdal.ogr2ogr import Ogr2Ogr
6667
from processing.gdal.ogrinfo import OgrInfo
@@ -113,7 +114,7 @@ def createAlgsList(self):
113114
ClipByExtent(), ClipByMask(), contour(), rasterize(), proximity(),
114115
sieve(), fillnodata(), ExtractProjection(), gdal2xyz(),
115116
hillshade(), slope(), aspect(), tri(), tpi(), roughness(),
116-
ColorRelief(),
117+
ColorRelief(), GridInvDist(),
117118
# ----- OGR tools -----
118119
OgrInfo(), Ogr2Ogr(), OgrSql(),
119120
]
Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
# -*- coding: utf-8 -*-
2+
3+
"""
4+
***************************************************************************
5+
GridInvDist.py
6+
---------------------
7+
Date : October 2013
8+
Copyright : (C) 2013 by Alexander Bruy
9+
Email : alexander dot bruy at gmail dot com
10+
***************************************************************************
11+
* *
12+
* This program is free software; you can redistribute it and/or modify *
13+
* it under the terms of the GNU General Public License as published by *
14+
* the Free Software Foundation; either version 2 of the License, or *
15+
* (at your option) any later version. *
16+
* *
17+
***************************************************************************
18+
"""
19+
20+
__author__ = 'Alexander Bruy'
21+
__date__ = 'October 2013'
22+
__copyright__ = '(C) 2013, Alexander Bruy'
23+
24+
# This will get replaced with a git SHA1 when you do a git archive
25+
26+
__revision__ = '$Format:%H$'
27+
28+
29+
from PyQt4.QtGui import *
30+
31+
from processing.core.GeoAlgorithm import GeoAlgorithm
32+
from processing.parameters.ParameterVector import ParameterVector
33+
from processing.parameters.ParameterTableField import ParameterTableField
34+
from processing.parameters.ParameterNumber import ParameterNumber
35+
from processing.outputs.OutputRaster import OutputRaster
36+
from processing.gdal.GdalUtils import GdalUtils
37+
from processing.tools.system import *
38+
39+
40+
class GridInvDist(GeoAlgorithm):
41+
42+
INPUT = 'INPUT'
43+
Z_FIELD = 'Z_FIELD'
44+
POWER = 'POWER'
45+
SMOTHING = 'SMOTHING'
46+
RADIUS_1 = 'RADIUS_1'
47+
RADIUS_2 = 'RADIUS_2'
48+
MAX_POINTS = 'MAX_POINTS'
49+
MIN_POINTS = 'MIN_POINTS'
50+
ANGLE = 'ANGLE'
51+
NODATA = 'NODATA'
52+
OUTPUT = 'OUTPUT'
53+
54+
#def getIcon(self):
55+
# filepath = os.path.dirname(__file__) + '/icons/dem.png'
56+
# return QIcon(filepath)
57+
58+
def defineCharacteristics(self):
59+
self.name = 'Grid (Inverse distance to a power)'
60+
self.group = '[GDAL] Analysis'
61+
self.addParameter(ParameterVector(self.INPUT, 'Input layer',
62+
[ParameterVector.VECTOR_TYPE_POINT]))
63+
self.addParameter(ParameterTableField(self.Z_FIELD, 'Z field',
64+
self.INPUT, ParameterTableField.DATA_TYPE_NUMBER,
65+
True))
66+
self.addParameter(ParameterNumber(self.POWER, 'Power', 0, 100.0, 2.0))
67+
self.addParameter(ParameterNumber(self.SMOTHING, 'Smothing',
68+
0.0, 99999999.999999, 0.0))
69+
self.addParameter(ParameterNumber(self.RADIUS_1, 'Radius 1',
70+
0.0, 99999999.999999, 0.0))
71+
self.addParameter(ParameterNumber(self.RADIUS_2, 'Radius 2',
72+
0.0, 99999999.999999, 0.0))
73+
self.addParameter(ParameterNumber(self.MAX_POINTS, 'Max points',
74+
0.0, 99999999.999999, 0.0))
75+
self.addParameter(ParameterNumber(self.MIN_POINTS, 'Min points',
76+
0.0, 99999999.999999, 0.0))
77+
self.addParameter(ParameterNumber(self.ANGLE, 'Angle',
78+
0.0, 359.0, 0.0))
79+
self.addParameter(ParameterNumber(self.NODATA, 'Nodata',
80+
-99999999.999999, 99999999.999999, 0.0))
81+
82+
self.addOutput(OutputRaster(self.OUTPUT, 'Output file'))
83+
84+
def processAlgorithm(self, progress):
85+
arguments = ['-l']
86+
arguments.append(
87+
os.path.basename(os.path.splitext(
88+
unicode(self.getParameterValue(self.INPUT)))[0]))
89+
90+
fieldName = self.getParameterValue(self.Z_FIELD)
91+
if fieldName is not None and fieldName != '':
92+
arguments.append('-zfield')
93+
arguments.append(fieldName)
94+
95+
params = 'invdist'
96+
params += ':power=%s' % self.getParameterValue(self.POWER)
97+
params += ':smothing=%s' % self.getParameterValue(self.SMOTHING)
98+
params += ':radius1=%s' % self.getParameterValue(self.RADIUS_1)
99+
params += ':radius2=%s' % self.getParameterValue(self.RADIUS_2)
100+
params += ':angle=%s' % self.getParameterValue(self.ANGLE)
101+
params += ':max_points=%s' % self.getParameterValue(self.MAX_POINTS)
102+
params += ':min_points=%s' % self.getParameterValue(self.MIN_POINTS)
103+
params += ':nodata=%s' % self.getParameterValue(self.NODATA)
104+
105+
arguments.append('-a')
106+
arguments.append(params)
107+
108+
arguments.append(unicode(self.getParameterValue(self.INPUT)))
109+
arguments.append(unicode(self.getOutputValue(self.OUTPUT)))
110+
111+
GdalUtils.runGdal(['gdal_grid',
112+
GdalUtils.escapeAndJoin(arguments)], progress)

0 commit comments

Comments
 (0)
Please sign in to comment.