Skip to content

Commit

Permalink
[processing] Add the missing optional extent param to the gdal clip r…
Browse files Browse the repository at this point in the history
…aster by mask aglorithm
  • Loading branch information
nirvn committed Dec 30, 2021
1 parent 6e60731 commit 17b9bb8
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 0 deletions.
17 changes: 17 additions & 0 deletions python/plugins/processing/algs/gdal/ClipRasterByMask.py
Expand Up @@ -33,6 +33,7 @@
QgsProcessingParameterRasterLayer,
QgsProcessingParameterCrs,
QgsProcessingParameterEnum,
QgsProcessingParameterExtent,
QgsProcessingParameterString,
QgsProcessingParameterNumber,
QgsProcessingParameterBoolean,
Expand All @@ -48,6 +49,7 @@ class ClipRasterByMask(GdalAlgorithm):
MASK = 'MASK'
SOURCE_CRS = 'SOURCE_CRS'
TARGET_CRS = 'TARGET_CRS'
EXTENT = 'TARGET_EXTENT'
NODATA = 'NODATA'
ALPHA_BAND = 'ALPHA_BAND'
CROP_TO_CUTLINE = 'CROP_TO_CUTLINE'
Expand Down Expand Up @@ -79,6 +81,9 @@ def initAlgorithm(self, config=None):
self.addParameter(QgsProcessingParameterCrs(self.TARGET_CRS,
self.tr('Target CRS'),
optional=True))
self.addParameter(QgsProcessingParameterExtent(self.EXTENT,
self.tr('Target extent'),
optional=True))
self.addParameter(QgsProcessingParameterNumber(self.NODATA,
self.tr('Assign a specified nodata value to output bands'),
type=QgsProcessingParameterNumber.Double,
Expand Down Expand Up @@ -169,6 +174,9 @@ def getConsoleCommands(self, parameters, context, feedback, executing=True):
sourceCrs = self.parameterAsCrs(parameters, self.SOURCE_CRS, context)
targetCrs = self.parameterAsCrs(parameters, self.TARGET_CRS, context)

bbox = self.parameterAsExtent(parameters, self.EXTENT, context)
bboxCrs = self.parameterAsExtentCrs(parameters, self.EXTENT, context)

if self.NODATA in parameters and parameters[self.NODATA] is not None:
nodata = self.parameterAsDouble(parameters, self.NODATA, context)
else:
Expand All @@ -187,6 +195,15 @@ def getConsoleCommands(self, parameters, context, feedback, executing=True):
arguments.append('-t_srs')
arguments.append(GdalUtils.gdal_crs_string(targetCrs))

if not bbox.isNull():
arguments.append('-te')
arguments.append(str(bbox.xMinimum()))
arguments.append(str(bbox.yMinimum()))
arguments.append(str(bbox.xMaximum()))
arguments.append(str(bbox.yMaximum()))
arguments.append('-te_srs')
arguments.append(GdalUtils.gdal_crs_string(bboxCrs))

data_type = self.parameterAsEnum(parameters, self.DATA_TYPE, context)
if data_type:
arguments.append('-ot ' + self.TYPES[data_type])
Expand Down
12 changes: 12 additions & 0 deletions python/plugins/processing/tests/GdalAlgorithmsRasterTest.py
Expand Up @@ -30,6 +30,7 @@
QgsProcessingException,
QgsProcessingFeedback,
QgsRectangle,
QgsReferencedRectangle,
QgsRasterLayer,
QgsProject,
QgsProjUtils,
Expand Down Expand Up @@ -393,6 +394,7 @@ def testClipRasterByMask(self):
feedback = QgsProcessingFeedback()
source = os.path.join(testDataPath, 'dem.tif')
mask = os.path.join(testDataPath, 'polys.gml')
extent = QgsReferencedRectangle(QgsRectangle(1, 2, 3, 4), QgsCoordinateReferenceSystem('EPSG:4236'))
alg = ClipRasterByMask()
alg.initAlgorithm()

Expand Down Expand Up @@ -460,6 +462,16 @@ def testClipRasterByMask(self):
mask + ' -cl polys2 -crop_to_cutline -multi -nosrcalpha -wm 2048 -nomd ' +
source + ' ' +
outdir + '/check.jpg'])
# with target extent value
self.assertEqual(
alg.getConsoleCommands({'INPUT': source,
'MASK': mask,
'TARGET_EXTENT': extent,
'OUTPUT': outdir + '/check.jpg'}, context, feedback),
['gdalwarp',
'-overwrite -te 1.0 2.0 3.0 4.0 -te_srs EPSG:4236 -of JPEG -cutline ' +
mask + ' -cl polys2 -crop_to_cutline ' + source + ' ' +
outdir + '/check.jpg'])

def testContourPolygon(self):
context = QgsProcessingContext()
Expand Down

0 comments on commit 17b9bb8

Please sign in to comment.