diff --git a/python/plugins/processing/algs/qgis/IdwInterpolation.py b/python/plugins/processing/algs/qgis/IdwInterpolation.py index 0d8d7d47b52e..d2f9f0204560 100644 --- a/python/plugins/processing/algs/qgis/IdwInterpolation.py +++ b/python/plugins/processing/algs/qgis/IdwInterpolation.py @@ -33,6 +33,7 @@ QgsProcessingUtils, QgsProcessingParameterNumber, QgsProcessingParameterExtent, + QgsProcessingParameterDefinition, QgsProcessingParameterRasterDestination, QgsProcessingException) from qgis.analysis import (QgsInterpolator, @@ -50,6 +51,8 @@ class IdwInterpolation(QgisAlgorithm): INTERPOLATION_DATA = 'INTERPOLATION_DATA' DISTANCE_COEFFICIENT = 'DISTANCE_COEFFICIENT' PIXEL_SIZE = 'PIXEL_SIZE' + COLUMNS = 'COLUMNS' + ROWS = 'ROWS' EXTENT = 'EXTENT' OUTPUT = 'OUTPUT' @@ -83,6 +86,20 @@ def initAlgorithm(self, config=None): default=0.1) self.addParameter(pixel_size_param) + cols_param = QgsProcessingParameterNumber(self.COLUMNS, + self.tr('Number of columns'), + optional=True, + minValue=0, maxValue=10000000) + cols_param.setFlags(cols_param.flags() | QgsProcessingParameterDefinition.FlagHidden) + self.addParameter(cols_param) + + rows_param = QgsProcessingParameterNumber(self.ROWS, + self.tr('Number of rows'), + optional=True, + minValue=0, maxValue=10000000) + rows_param.setFlags(rows_param.flags() | QgsProcessingParameterDefinition.FlagHidden) + self.addParameter(rows_param) + self.addParameter(QgsProcessingParameterRasterDestination(self.OUTPUT, self.tr('Interpolated'))) @@ -99,6 +116,13 @@ def processAlgorithm(self, parameters, context, feedback): pixel_size = self.parameterAsDouble(parameters, self.PIXEL_SIZE, context) output = self.parameterAsOutputLayer(parameters, self.OUTPUT, context) + columns = self.parameterAsInt(parameters, self.COLUMNS, context) + rows = self.parameterAsInt(parameters, self.ROWS, context) + if columns == 0: + columns = max(round(bbox.width() / pixel_size) + 1, 1) + if rows == 0: + rows = max(round(bbox.height() / pixel_size) + 1, 1) + if interpolationData is None: raise QgsProcessingException( self.tr('You need to specify at least one input layer.')) @@ -127,9 +151,6 @@ def processAlgorithm(self, parameters, context, feedback): interpolator = QgsIDWInterpolator(layerData) interpolator.setDistanceCoefficient(coefficient) - rows = max(round(bbox.height() / pixel_size) + 1, 1) - columns = max(round(bbox.width() / pixel_size) + 1, 1) - writer = QgsGridFileWriter(interpolator, output, bbox, diff --git a/python/plugins/processing/algs/qgis/TinInterpolation.py b/python/plugins/processing/algs/qgis/TinInterpolation.py index 3fba278c4adf..f215ad15d123 100644 --- a/python/plugins/processing/algs/qgis/TinInterpolation.py +++ b/python/plugins/processing/algs/qgis/TinInterpolation.py @@ -34,6 +34,7 @@ QgsProcessingParameterEnum, QgsProcessingParameterNumber, QgsProcessingParameterExtent, + QgsProcessingParameterDefinition, QgsProcessingParameterRasterDestination, QgsWkbTypes, QgsProcessingParameterFeatureSink, @@ -53,6 +54,8 @@ class TinInterpolation(QgisAlgorithm): INTERPOLATION_DATA = 'INTERPOLATION_DATA' METHOD = 'METHOD' PIXEL_SIZE = 'PIXEL_SIZE' + COLUMNS = 'COLUMNS' + ROWS = 'ROWS' EXTENT = 'EXTENT' OUTPUT = 'OUTPUT' TRIANGULATION = 'TRIANGULATION' @@ -91,6 +94,20 @@ def initAlgorithm(self, config=None): default=0.1) self.addParameter(pixel_size_param) + cols_param = QgsProcessingParameterNumber(self.COLUMNS, + self.tr('Number of columns'), + optional=True, + minValue=0, maxValue=10000000) + cols_param.setFlags(cols_param.flags() | QgsProcessingParameterDefinition.FlagHidden) + self.addParameter(cols_param) + + rows_param = QgsProcessingParameterNumber(self.ROWS, + self.tr('Number of rows'), + optional=True, + minValue=0, maxValue=10000000) + rows_param.setFlags(rows_param.flags() | QgsProcessingParameterDefinition.FlagHidden) + self.addParameter(rows_param) + self.addParameter(QgsProcessingParameterRasterDestination(self.OUTPUT, self.tr('Interpolated'))) @@ -114,6 +131,13 @@ def processAlgorithm(self, parameters, context, feedback): pixel_size = self.parameterAsDouble(parameters, self.PIXEL_SIZE, context) output = self.parameterAsOutputLayer(parameters, self.OUTPUT, context) + columns = self.parameterAsInt(parameters, self.COLUMNS, context) + rows = self.parameterAsInt(parameters, self.ROWS, context) + if columns == 0: + columns = max(round(bbox.width() / pixel_size) + 1, 1) + if rows == 0: + rows = max(round(bbox.height() / pixel_size) + 1, 1) + if interpolationData is None: raise QgsProcessingException( self.tr('You need to specify at least one input layer.')) @@ -154,9 +178,6 @@ def processAlgorithm(self, parameters, context, feedback): if triangulation_sink is not None: interpolator.setTriangulationSink(triangulation_sink) - rows = max(round(bbox.height() / pixel_size) + 1, 1) - columns = max(round(bbox.width() / pixel_size) + 1, 1) - writer = QgsGridFileWriter(interpolator, output, bbox,