mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-14 00:07:35 -04:00
[processing] restore moving average interpolation
This commit is contained in:
parent
232fd47485
commit
8c09860dd7
@ -40,6 +40,7 @@ from .ColorRelief import ColorRelief
|
||||
from .contour import contour
|
||||
from .fillnodata import fillnodata
|
||||
from .gdaltindex import gdaltindex
|
||||
from .GridAverage import GridAverage
|
||||
from .hillshade import hillshade
|
||||
from .information import information
|
||||
from .nearblack import nearblack
|
||||
@ -63,7 +64,6 @@ from .warp import warp
|
||||
# from .extractprojection import ExtractProjection
|
||||
# from .gdal2xyz import gdal2xyz
|
||||
# from .GridInvDist import GridInvDist
|
||||
# from .GridAverage import GridAverage
|
||||
# from .GridNearest import GridNearest
|
||||
# from .GridDataMetrics import GridDataMetrics
|
||||
# from .gdalcalc import gdalcalc
|
||||
@ -141,6 +141,7 @@ class GdalAlgorithmProvider(QgsProcessingProvider):
|
||||
contour(),
|
||||
fillnodata(),
|
||||
gdaltindex(),
|
||||
GridAverage(),
|
||||
hillshade(),
|
||||
information(),
|
||||
nearblack(),
|
||||
@ -163,7 +164,6 @@ class GdalAlgorithmProvider(QgsProcessingProvider):
|
||||
# ExtractProjection(),
|
||||
# gdal2xyz(),
|
||||
# GridInvDist(),
|
||||
# GridAverage(),
|
||||
# GridNearest(),
|
||||
# GridDataMetrics(),
|
||||
# gdalcalc(),
|
||||
|
@ -16,7 +16,6 @@
|
||||
* *
|
||||
***************************************************************************
|
||||
"""
|
||||
from builtins import str
|
||||
|
||||
__author__ = 'Alexander Bruy'
|
||||
__date__ = 'October 2013'
|
||||
@ -30,13 +29,15 @@ import os
|
||||
|
||||
from qgis.PyQt.QtGui import QIcon
|
||||
|
||||
from qgis.core import (QgsRasterFileWriter,
|
||||
QgsProcessing,
|
||||
QgsProcessingParameterDefinition,
|
||||
QgsProcessingParameterVectorLayer,
|
||||
QgsProcessingParameterEnum,
|
||||
QgsProcessingParameterField,
|
||||
QgsProcessingParameterNumber,
|
||||
QgsProcessingParameterRasterDestination)
|
||||
from processing.algs.gdal.GdalAlgorithm import GdalAlgorithm
|
||||
from processing.core.parameters import ParameterVector
|
||||
from processing.core.parameters import ParameterTableField
|
||||
from processing.core.parameters import ParameterNumber
|
||||
from processing.core.parameters import ParameterSelection
|
||||
from processing.core.outputs import OutputRaster
|
||||
from processing.tools import dataobjects
|
||||
from processing.algs.gdal.GdalUtils import GdalUtils
|
||||
|
||||
pluginPath = os.path.split(os.path.split(os.path.dirname(__file__))[0])[0]
|
||||
@ -51,34 +52,67 @@ class GridAverage(GdalAlgorithm):
|
||||
MIN_POINTS = 'MIN_POINTS'
|
||||
ANGLE = 'ANGLE'
|
||||
NODATA = 'NODATA'
|
||||
DATA_TYPE = 'DATA_TYPE'
|
||||
OUTPUT = 'OUTPUT'
|
||||
RTYPE = 'RTYPE'
|
||||
|
||||
TYPE = ['Byte', 'Int16', 'UInt16', 'UInt32', 'Int32', 'Float32', 'Float64']
|
||||
TYPE = ['Byte', 'Int16', 'UInt16', 'UInt32', 'Int32', 'Float32', 'Float64', 'CInt16', 'CInt32', 'CFloat32', 'CFloat64']
|
||||
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
|
||||
def initAlgorithm(self, config=None):
|
||||
self.addParameter(ParameterVector(self.INPUT,
|
||||
self.tr('Input layer'), [dataobjects.TYPE_VECTOR_POINT]))
|
||||
self.addParameter(ParameterTableField(self.Z_FIELD,
|
||||
self.tr('Z field'), self.INPUT,
|
||||
ParameterTableField.DATA_TYPE_NUMBER, True))
|
||||
self.addParameter(ParameterNumber(self.RADIUS_1,
|
||||
self.tr('Radius 1'), 0.0, 99999999.999999, 0.0))
|
||||
self.addParameter(ParameterNumber(self.RADIUS_2,
|
||||
self.tr('Radius 2'), 0.0, 99999999.999999, 0.0))
|
||||
self.addParameter(ParameterNumber(self.MIN_POINTS,
|
||||
self.tr('Min points'), 0.0, 99999999.999999, 0.0))
|
||||
self.addParameter(ParameterNumber(self.ANGLE,
|
||||
self.tr('Angle'), 0.0, 359.0, 0.0))
|
||||
self.addParameter(ParameterNumber(self.NODATA,
|
||||
self.tr('Nodata'), 0.0, 99999999.999999, 0.0))
|
||||
self.addParameter(ParameterSelection(self.RTYPE,
|
||||
self.tr('Output raster type'), self.TYPE, 5))
|
||||
self.addParameter(QgsProcessingParameterVectorLayer(self.INPUT,
|
||||
self.tr('Point layer'),
|
||||
[QgsProcessing.TypeVectorPoint]))
|
||||
|
||||
self.addOutput(OutputRaster(self.OUTPUT, self.tr('Interpolated moving average')))
|
||||
z_field_param = QgsProcessingParameterField(self.Z_FIELD,
|
||||
self.tr('Z value from field'),
|
||||
None,
|
||||
self.INPUT,
|
||||
QgsProcessingParameterField.Numeric,
|
||||
optional=True)
|
||||
z_field_param.setFlags(z_field_param.flags() | QgsProcessingParameterDefinition.FlagAdvanced)
|
||||
self.addParameter(z_field_param)
|
||||
|
||||
self.addParameter(QgsProcessingParameterNumber(self.RADIUS_1,
|
||||
self.tr('The first radius of search ellipse'),
|
||||
type=QgsProcessingParameterNumber.Double,
|
||||
minValue=0.0,
|
||||
maxValue=99999999.999999,
|
||||
defaultValue=0.0))
|
||||
self.addParameter(QgsProcessingParameterNumber(self.RADIUS_2,
|
||||
self.tr('The second radius of search ellipse'),
|
||||
type=QgsProcessingParameterNumber.Double,
|
||||
minValue=0.0,
|
||||
maxValue=99999999.999999,
|
||||
defaultValue=0.0))
|
||||
self.addParameter(QgsProcessingParameterNumber(self.ANGLE,
|
||||
self.tr('Angle of search ellipse rotation in degrees (counter clockwise)'),
|
||||
type=QgsProcessingParameterNumber.Double,
|
||||
minValue=0.0,
|
||||
maxValue=360.0,
|
||||
defaultValue=0.0))
|
||||
self.addParameter(QgsProcessingParameterNumber(self.MIN_POINTS,
|
||||
self.tr('Minimum number of data points to use'),
|
||||
type=QgsProcessingParameterNumber.Integer,
|
||||
minValue=0,
|
||||
maxValue=99999999,
|
||||
defaultValue=0))
|
||||
self.addParameter(QgsProcessingParameterNumber(self.NODATA,
|
||||
self.tr('NODATA marker to fill empty points'),
|
||||
type=QgsProcessingParameterNumber.Double,
|
||||
minValue=-99999999.999999,
|
||||
maxValue=99999999.999999,
|
||||
defaultValue=0.0))
|
||||
|
||||
self.addParameter(QgsProcessingParameterEnum(self.DATA_TYPE,
|
||||
self.tr('Output data type'),
|
||||
self.TYPE,
|
||||
allowMultiple=False,
|
||||
defaultValue=5))
|
||||
|
||||
self.addParameter(QgsProcessingParameterRasterDestination(self.OUTPUT,
|
||||
self.tr('Interpolated (moving average)')))
|
||||
|
||||
def name(self):
|
||||
return 'gridaverage'
|
||||
@ -86,35 +120,41 @@ class GridAverage(GdalAlgorithm):
|
||||
def displayName(self):
|
||||
return self.tr('Grid (Moving average)')
|
||||
|
||||
def icon(self):
|
||||
return QIcon(os.path.join(pluginPath, 'images', 'gdaltools', 'grid.png'))
|
||||
|
||||
def group(self):
|
||||
return self.tr('Raster analysis')
|
||||
|
||||
def getConsoleCommands(self, parameters, context, feedback):
|
||||
arguments = ['-l']
|
||||
arguments.append(
|
||||
os.path.basename(os.path.splitext(
|
||||
str(self.getParameterValue(self.INPUT)))[0]))
|
||||
def icon(self):
|
||||
return QIcon(os.path.join(pluginPath, 'images', 'gdaltools', 'grid.png'))
|
||||
|
||||
fieldName = self.getParameterValue(self.Z_FIELD)
|
||||
if fieldName is not None and fieldName != '':
|
||||
def getConsoleCommands(self, parameters, context, feedback):
|
||||
inLayer = self.parameterAsVectorLayer(parameters, self.INPUT, context)
|
||||
connectionString = GdalUtils.ogrConnectionString(inLayer.source(), context)
|
||||
|
||||
arguments = ['-l']
|
||||
arguments.append(GdalUtils.ogrLayerName(connectionString))
|
||||
|
||||
fieldName = self.parameterAsString(parameters, self.Z_FIELD, context)
|
||||
if 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)
|
||||
params += ':radius1={}'.format(self.parameterAsDouble(parameters, self.RADIUS_1, context))
|
||||
params += ':radius2={}'.format(self.parameterAsDouble(parameters, self.RADIUS_2, context))
|
||||
params += ':angle={}'.format(self.parameterAsDouble(parameters, self.ANGLE, context))
|
||||
params += ':min_points={}'.format(self.parameterAsInt(parameters, self.MIN_POINTS, context))
|
||||
params += ':nodata={}'.format(self.parameterAsDouble(parameters, self.NODATA, context))
|
||||
|
||||
arguments.append('-a')
|
||||
arguments.append(params)
|
||||
arguments.append('-ot')
|
||||
arguments.append(self.TYPE[self.getParameterValue(self.RTYPE)])
|
||||
arguments.append(str(self.getParameterValue(self.INPUT)))
|
||||
arguments.append(str(self.getOutputValue(self.OUTPUT)))
|
||||
arguments.append(self.TYPE[self.parameterAsEnum(parameters, self.DATA_TYPE, context)])
|
||||
|
||||
out = self.parameterAsOutputLayer(parameters, self.OUTPUT, context)
|
||||
arguments.append('-of')
|
||||
arguments.append(QgsRasterFileWriter.driverForExtension(os.path.splitext(out)[1]))
|
||||
|
||||
arguments.append(connectionString)
|
||||
arguments.append(out)
|
||||
|
||||
return ['gdal_grid', GdalUtils.escapeAndJoin(arguments)]
|
||||
|
@ -377,6 +377,24 @@ tests:
|
||||
hash: f714597fadc9cfc3f5263dc0e35f7c6ba285de238dce439e4988faac
|
||||
type: rasterhash
|
||||
|
||||
- algorithm: gdal:gridaverage
|
||||
name: Moving Average interpolation
|
||||
params:
|
||||
ANGLE: 0.0
|
||||
INPUT:
|
||||
name: custom/points_values.gml
|
||||
type: vector
|
||||
MIN_POINTS: 0.0
|
||||
NODATA: 0.0
|
||||
RADIUS_1: 0.01
|
||||
RADIUS_2: 0.01
|
||||
RTYPE: '5'
|
||||
Z_FIELD: EC
|
||||
results:
|
||||
OUTPUT:
|
||||
hash: 3542d928bccee955b1c426cac7b698c603c9a385429ca529758083bf
|
||||
type: rasterhash
|
||||
|
||||
# - algorithm: gdal:merge
|
||||
# name: Merge 2 raster layers
|
||||
# params:
|
||||
@ -484,24 +502,6 @@ tests:
|
||||
# hash: 220953299b18286b57ce093a054323e59add7c78c0429a02e51b4ad4
|
||||
# type: rasterhash
|
||||
#
|
||||
# - algorithm: gdal:gridaverage
|
||||
# name: Moving Average interpolation
|
||||
# params:
|
||||
# ANGLE: 0.0
|
||||
# INPUT:
|
||||
# name: custom/points_values.gml
|
||||
# type: vector
|
||||
# MIN_POINTS: 0.0
|
||||
# NODATA: 0.0
|
||||
# RADIUS_1: 0.01
|
||||
# RADIUS_2: 0.01
|
||||
# RTYPE: '5'
|
||||
# Z_FIELD: EC
|
||||
# results:
|
||||
# OUTPUT:
|
||||
# hash: 3542d928bccee955b1c426cac7b698c603c9a385429ca529758083bf
|
||||
# type: rasterhash
|
||||
#
|
||||
# - algorithm: gdal:gridnearestneighbor
|
||||
# name: Nearest Neighbor interpolation
|
||||
# params:
|
||||
|
Loading…
x
Reference in New Issue
Block a user