[processing] fix handling of the mask layer in the gdal_sieve algorithm

(fix #20713)
This commit is contained in:
Alexander Bruy 2019-01-01 15:20:21 +02:00
parent 1233a21ac2
commit a5365e26eb
3 changed files with 67 additions and 19 deletions

View File

@ -104,7 +104,7 @@ class sieve(GdalAlgorithm):
if self.parameterAsBool(parameters, self.NO_MASK, context):
arguments.append('-nomask')
mask = self.parameterAsRasterLayer(parameters, self.INPUT, context)
mask = self.parameterAsRasterLayer(parameters, self.MASK_LAYER, context)
if mask:
arguments.append('-mask {}'.format(mask.source()))

View File

@ -60,6 +60,7 @@ from processing.algs.gdal.warp import warp
from processing.algs.gdal.fillnodata import fillnodata
from processing.algs.gdal.rearrange_bands import rearrange_bands
from processing.algs.gdal.gdaladdo import gdaladdo
from processing.algs.gdal.sieve import sieve
from processing.tools.system import isWindows
@ -2448,6 +2449,71 @@ class TestGdalAlgorithms(unittest.TestCase, AlgorithmsTestBase.AlgorithmsTest):
['gdaladdo',
source + ' ' + '-r nearest 2 4 8 16'])
def testSieve(self):
context = QgsProcessingContext()
feedback = QgsProcessingFeedback()
source = os.path.join(testDataPath, 'dem.tif')
mask = os.path.join(testDataPath, 'raster.tif')
with tempfile.TemporaryDirectory() as outdir:
outsource = outdir + '/check.tif'
alg = sieve()
alg.initAlgorithm()
# defaults
self.assertEqual(
alg.getConsoleCommands({'INPUT': source,
'THRESHOLD': 10,
'EIGHT_CONNECTEDNESS': False,
'NO_MASK': False,
'MASK_LAYER': None,
'OUTPUT': outsource}, context, feedback),
['gdal_sieve.py',
'-st 10 -4 -of GTiff ' +
source + ' ' +
outsource])
# Eight connectedness and custom threshold
self.assertEqual(
alg.getConsoleCommands({'INPUT': source,
'THRESHOLD': 16,
'EIGHT_CONNECTEDNESS': True,
'NO_MASK': False,
'MASK_LAYER': None,
'OUTPUT': outsource}, context, feedback),
['gdal_sieve.py',
'-st 16 -8 -of GTiff ' +
source + ' ' +
outsource])
# without default mask layer
self.assertEqual(
alg.getConsoleCommands({'INPUT': source,
'THRESHOLD': 10,
'EIGHT_CONNECTEDNESS': False,
'NO_MASK': True,
'MASK_LAYER': None,
'OUTPUT': outsource}, context, feedback),
['gdal_sieve.py',
'-st 10 -4 -nomask -of GTiff ' +
source + ' ' +
outsource])
# defaults with external validity mask
self.assertEqual(
alg.getConsoleCommands({'INPUT': source,
'THRESHOLD': 10,
'EIGHT_CONNECTEDNESS': False,
'NO_MASK': False,
'MASK_LAYER': mask,
'OUTPUT': outsource}, context, feedback),
['gdal_sieve.py',
'-st 10 -4 -mask ' +
mask +
' -of GTiff ' +
source + ' ' +
outsource])
class TestGdalOgrToPostGis(unittest.TestCase):

View File

@ -420,24 +420,6 @@ tests:
hash: ee2b317e022da1001378fac60c9b613a74d3566b9870f9d121e6e322
type: rasterhash
# Disabled as gdal_sieve is not available on Travis
# - algorithm: gdal:sieve
# name: Sieve
# params:
# EIGHT_CONNECTEDNESS: false
# INPUT:
# name: dem.tif
# type: raster
# MASK_LAYER:
# name: dem.tif
# type: raster
# NO_MASK: false
# THRESHOLD: 10
# results:
# OUTPUT:
# hash: 1ea6a8c838add299dc3f6f9f529eb5945664f68bae97be9ca80b1754
# type: rasterhash
- algorithm: gdal:slope
name: Slope
params: