Skip to content

Commit a9d8d39

Browse files
authored
[processing] restore near black and hillshade gdal algs (#5028)
1 parent 19efee8 commit a9d8d39

File tree

4 files changed

+128
-123
lines changed

4 files changed

+128
-123
lines changed

python/plugins/processing/algs/gdal/GdalAlgorithmProvider.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
from .ColorRelief import ColorRelief
3939
from .tri import tri
4040
from .warp import warp
41-
# from .nearblack import nearblack
41+
from .nearblack import nearblack
4242
# from .information import information
4343
# from .rgb2pct import rgb2pct
4444
# from .translate import translate
@@ -56,7 +56,7 @@
5656
# from .fillnodata import fillnodata
5757
# from .extractprojection import ExtractProjection
5858
# from .gdal2xyz import gdal2xyz
59-
# from .hillshade import hillshade
59+
from .hillshade import hillshade
6060
# from .slope import slope
6161
# from .tpi import tpi
6262
# from .roughness import roughness
@@ -140,7 +140,7 @@ def svgIconPath(self):
140140

141141
def loadAlgorithms(self):
142142
self.algs = [
143-
# nearblack(),
143+
nearblack(),
144144
# information(),
145145
AssignProjection(),
146146
aspect(),
@@ -163,7 +163,7 @@ def loadAlgorithms(self):
163163
# fillnodata(),
164164
# ExtractProjection(),
165165
# gdal2xyz(),
166-
# hillshade(),
166+
hillshade(),
167167
# slope(),
168168
# tpi(),
169169
# roughness(),

python/plugins/processing/algs/gdal/hillshade.py

+35-33
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,13 @@
2929

3030
import os
3131

32+
from qgis.core import (QgsProcessingParameterRasterLayer,
33+
QgsProcessingParameterBand,
34+
QgsProcessingParameterBoolean,
35+
QgsProcessingParameterNumber,
36+
QgsProcessingParameterRasterDestination)
37+
3238
from processing.algs.gdal.GdalAlgorithm import GdalAlgorithm
33-
from processing.core.parameters import ParameterRaster
34-
from processing.core.parameters import ParameterBoolean
35-
from processing.core.parameters import ParameterNumber
36-
from processing.core.outputs import OutputRaster
3739
from processing.algs.gdal.GdalUtils import GdalUtils
3840

3941
pluginPath = os.path.split(os.path.split(os.path.dirname(__file__))[0])[0]
@@ -55,26 +57,26 @@ def __init__(self):
5557
super().__init__()
5658

5759
def initAlgorithm(self, config=None):
58-
self.addParameter(ParameterRaster(self.INPUT, self.tr('Input layer')))
59-
self.addParameter(ParameterNumber(self.BAND,
60-
self.tr('Band number'), 1, 99, 1))
61-
self.addParameter(ParameterBoolean(self.COMPUTE_EDGES,
62-
self.tr('Compute edges'), False))
63-
self.addParameter(ParameterBoolean(self.ZEVENBERGEN,
64-
self.tr("Use Zevenbergen&Thorne formula (instead of the Horn's one)"),
65-
False))
66-
self.addParameter(ParameterNumber(self.Z_FACTOR,
67-
self.tr('Z factor (vertical exaggeration)'),
68-
0.0, 99999999.999999, 1.0))
69-
self.addParameter(ParameterNumber(self.SCALE,
70-
self.tr('Scale (ratio of vert. units to horiz.)'),
71-
0.0, 99999999.999999, 1.0))
72-
self.addParameter(ParameterNumber(self.AZIMUTH,
73-
self.tr('Azimuth of the light'), 0.0, 359.0, 315.0))
74-
self.addParameter(ParameterNumber(self.ALTITUDE,
75-
self.tr('Altitude of the light'), 0.0, 99999999.999999, 45.0))
76-
77-
self.addOutput(OutputRaster(self.OUTPUT, self.tr('Hillshade')))
60+
self.addParameter(QgsProcessingParameterRasterLayer(self.INPUT, self.tr('Input layer')))
61+
self.addParameter(QgsProcessingParameterBand(self.BAND,
62+
self.tr('Band number'), parentLayerParameterName=self.INPUT))
63+
self.addParameter(QgsProcessingParameterBoolean(self.COMPUTE_EDGES,
64+
self.tr('Compute edges'), defaultValue=False))
65+
self.addParameter(QgsProcessingParameterBoolean(self.ZEVENBERGEN,
66+
self.tr("Use Zevenbergen&Thorne formula (instead of the Horn's one)"), defaultValue=False))
67+
self.addParameter(QgsProcessingParameterNumber(self.Z_FACTOR,
68+
self.tr('Z factor (vertical exaggeration)'),
69+
type=QgsProcessingParameterNumber.Double, minValue=0.0, maxValue=99999999.999999, defaultValue=1.0))
70+
self.addParameter(QgsProcessingParameterNumber(self.SCALE,
71+
self.tr('Scale (ratio of vert. units to horiz.)'),
72+
type=QgsProcessingParameterNumber.Double, minValue=0.0, maxValue=99999999.999999, defaultValue=1.0))
73+
self.addParameter(QgsProcessingParameterNumber(self.AZIMUTH,
74+
self.tr('Azimuth of the light'),
75+
type=QgsProcessingParameterNumber.Double, minValue=0.0, maxValue=359.9, defaultValue=315.0))
76+
self.addParameter(QgsProcessingParameterNumber(self.ALTITUDE,
77+
self.tr('Altitude of the light'),
78+
type=QgsProcessingParameterNumber.Double, minValue=0.0, maxValue=99999999.999999, defaultValue=45.0))
79+
self.addParameter(QgsProcessingParameterRasterDestination(self.OUTPUT, self.tr('Hillshade')))
7880

7981
def name(self):
8082
return 'hillshade'
@@ -87,24 +89,24 @@ def group(self):
8789

8890
def getConsoleCommands(self, parameters, context, feedback):
8991
arguments = ['hillshade']
90-
arguments.append(str(self.getParameterValue(self.INPUT)))
91-
arguments.append(str(self.getOutputValue(self.OUTPUT)))
92+
arguments.append(self.parameterAsRasterLayer(parameters, self.INPUT, context).source())
93+
arguments.append(str(self.parameterAsOutputLayer(parameters, self.OUTPUT, context)))
9294

9395
arguments.append('-b')
94-
arguments.append(str(self.getParameterValue(self.BAND)))
96+
arguments.append(str(self.parameterAsInt(parameters, self.BAND, context)))
9597
arguments.append('-z')
96-
arguments.append(str(self.getParameterValue(self.Z_FACTOR)))
98+
arguments.append(str(self.parameterAsDouble(parameters, self.Z_FACTOR, context)))
9799
arguments.append('-s')
98-
arguments.append(str(self.getParameterValue(self.SCALE)))
100+
arguments.append(str(self.parameterAsDouble(parameters, self.SCALE, context)))
99101
arguments.append('-az')
100-
arguments.append(str(self.getParameterValue(self.AZIMUTH)))
102+
arguments.append(str(self.parameterAsDouble(parameters, self.AZIMUTH, context)))
101103
arguments.append('-alt')
102-
arguments.append(str(self.getParameterValue(self.ALTITUDE)))
104+
arguments.append(str(self.parameterAsDouble(parameters, self.ALTITUDE, context)))
103105

104-
if self.getParameterValue(self.COMPUTE_EDGES):
106+
if self.parameterAsBool(parameters, self.COMPUTE_EDGES, context):
105107
arguments.append('-compute_edges')
106108

107-
if self.getParameterValue(self.ZEVENBERGEN):
109+
if self.parameterAsBool(parameters, self.ZEVENBERGEN, context):
108110
arguments.append('-alg')
109111
arguments.append('ZevenbergenThorne')
110112

python/plugins/processing/algs/gdal/nearblack.py

+21-18
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,14 @@
2828

2929
import os
3030

31+
from qgis.core import (QgsProcessingParameterRasterLayer,
32+
QgsProcessingParameterBoolean,
33+
QgsProcessingParameterNumber,
34+
QgsProcessingParameterRasterDestination)
35+
3136
from qgis.PyQt.QtGui import QIcon
3237

3338
from processing.algs.gdal.GdalAlgorithm import GdalAlgorithm
34-
from processing.core.parameters import ParameterRaster
35-
from processing.core.parameters import ParameterNumber
36-
from processing.core.parameters import ParameterBoolean
37-
from processing.core.outputs import OutputRaster
3839
from processing.algs.gdal.GdalUtils import GdalUtils
3940

4041
pluginPath = os.path.split(os.path.split(os.path.dirname(__file__))[0])[0]
@@ -54,14 +55,14 @@ def __init__(self):
5455
super().__init__()
5556

5657
def initAlgorithm(self, config=None):
57-
self.addParameter(ParameterRaster(self.INPUT,
58-
self.tr('Input layer'), False))
59-
self.addParameter(ParameterNumber(self.NEAR,
60-
self.tr('How far from black (white)'), 0, None, 15))
61-
self.addParameter(ParameterBoolean(self.WHITE,
62-
self.tr('Search for nearly white pixels instead of nearly black'),
63-
False))
64-
self.addOutput(OutputRaster(self.OUTPUT, self.tr('Nearblack')))
58+
self.addParameter(QgsProcessingParameterRasterLayer(self.INPUT, self.tr('Input layer'), False))
59+
self.addParameter(QgsProcessingParameterNumber(self.NEAR,
60+
self.tr('How far from black (white)'),
61+
type=QgsProcessingParameterNumber.Integer, minValue=0, maxValue=15, defaultValue=None))
62+
self.addParameter(QgsProcessingParameterBoolean(self.WHITE,
63+
self.tr('Search for nearly white pixels instead of nearly black'),
64+
defaultValue=False))
65+
self.addParameter(QgsProcessingParameterRasterDestination(self.OUTPUT, self.tr('Nearblack')))
6566

6667
def name(self):
6768
return 'nearblack'
@@ -73,15 +74,17 @@ def group(self):
7374
return self.tr('Raster analysis')
7475

7576
def getConsoleCommands(self, parameters, context, feedback):
77+
out = str(self.parameterAsOutputLayer(parameters, self.OUTPUT, context))
78+
7679
arguments = []
7780
arguments.append('-o')
78-
output = str(self.getOutputValue(self.OUTPUT))
79-
arguments.append(output)
81+
arguments.append(out)
8082
arguments.append('-of')
81-
arguments.append(GdalUtils.getFormatShortNameFromFilename(output))
83+
arguments.append(GdalUtils.getFormatShortNameFromFilename(out))
8284
arguments.append('-near')
83-
arguments.append(str(self.getParameterValue(self.NEAR)))
84-
if self.getParameterValue(self.WHITE):
85+
arguments.append(str(self.parameterAsInt(parameters, self.NEAR, context)))
86+
if self.parameterAsBool(parameters, self.WHITE, context):
8587
arguments.append('-white')
86-
arguments.append(self.getParameterValue(self.INPUT))
88+
arguments.append(self.parameterAsRasterLayer(parameters, self.INPUT, context).source())
89+
8790
return ['nearblack', GdalUtils.escapeAndJoin(arguments)]

python/plugins/processing/tests/testdata/gdal_algorithm_tests.yaml

+68-68
Original file line numberDiff line numberDiff line change
@@ -339,61 +339,61 @@ tests:
339339
# OUTPUT:
340340
# hash: 8f69431c6ff7db5174c1ca8e879ae39582fd4ce86f9b53edae0f38ce
341341
# type: rasterhash
342-
#
343-
# - algorithm: gdal:hillshade
344-
# name: Hillshade
345-
# params:
346-
# ALTITUDE: 45.0
347-
# AZIMUTH: 315.0
348-
# BAND: 1
349-
# COMPUTE_EDGES: false
350-
# INPUT:
351-
# name: dem.tif
352-
# type: raster
353-
# SCALE: 1.0
354-
# ZEVENBERGEN: false
355-
# Z_FACTOR: 1.0
356-
# results:
357-
# OUTPUT:
358-
# hash: e5cf91b875b918682e456463165eddc4af4ae8855b143068e198ce2a
359-
# type: rasterhash
360-
#
361-
# - algorithm: gdal:hillshade
362-
# name: Hillshade with edges calculation
363-
# params:
364-
# ALTITUDE: 45.0
365-
# AZIMUTH: 315.0
366-
# BAND: 1
367-
# COMPUTE_EDGES: true
368-
# INPUT:
369-
# name: dem.tif
370-
# type: raster
371-
# SCALE: 1.0
372-
# ZEVENBERGEN: false
373-
# Z_FACTOR: 1.0
374-
# results:
375-
# OUTPUT:
376-
# hash: 570671408b020c9cc817e876f0e8081e0b11920c7d297abfe1cb3368
377-
# type: rasterhash
378-
#
379-
# - algorithm: gdal:hillshade
380-
# name: Hillshade with Zevenbergen formula
381-
# params:
382-
# ALTITUDE: 45.0
383-
# AZIMUTH: 315.0
384-
# BAND: 1
385-
# COMPUTE_EDGES: false
386-
# INPUT:
387-
# name: dem.tif
388-
# type: raster
389-
# SCALE: 1.0
390-
# ZEVENBERGEN: true
391-
# Z_FACTOR: 1.0
392-
# results:
393-
# OUTPUT:
394-
# hash: ce2174ab155023367d38785fb867456c6a1ae3535ea0ec5ad7a694d5
395-
# type: rasterhash
396-
#
342+
343+
- algorithm: gdal:hillshade
344+
name: Hillshade
345+
params:
346+
ALTITUDE: 45.0
347+
AZIMUTH: 315.0
348+
BAND: 1
349+
COMPUTE_EDGES: false
350+
INPUT:
351+
name: dem.tif
352+
type: raster
353+
SCALE: 1.0
354+
ZEVENBERGEN: false
355+
Z_FACTOR: 1.0
356+
results:
357+
OUTPUT:
358+
hash: e5cf91b875b918682e456463165eddc4af4ae8855b143068e198ce2a
359+
type: rasterhash
360+
361+
- algorithm: gdal:hillshade
362+
name: Hillshade with edges calculation
363+
params:
364+
ALTITUDE: 45.0
365+
AZIMUTH: 315.0
366+
BAND: 1
367+
COMPUTE_EDGES: true
368+
INPUT:
369+
name: dem.tif
370+
type: raster
371+
SCALE: 1.0
372+
ZEVENBERGEN: false
373+
Z_FACTOR: 1.0
374+
results:
375+
OUTPUT:
376+
hash: 570671408b020c9cc817e876f0e8081e0b11920c7d297abfe1cb3368
377+
type: rasterhash
378+
379+
- algorithm: gdal:hillshade
380+
name: Hillshade with Zevenbergen formula
381+
params:
382+
ALTITUDE: 45.0
383+
AZIMUTH: 315.0
384+
BAND: 1
385+
COMPUTE_EDGES: false
386+
INPUT:
387+
name: dem.tif
388+
type: raster
389+
SCALE: 1.0
390+
ZEVENBERGEN: true
391+
Z_FACTOR: 1.0
392+
results:
393+
OUTPUT:
394+
hash: ce2174ab155023367d38785fb867456c6a1ae3535ea0ec5ad7a694d5
395+
type: rasterhash
396+
397397
# - algorithm: gdal:slope
398398
# name: Slope
399399
# params:
@@ -510,19 +510,19 @@ tests:
510510
hash: 07376c74de869323125ceacbb5e34438655ff73f63d4b3ff3e268f7f
511511
type: rasterhash
512512

513-
# - algorithm: gdal:nearblack
514-
# name: standard near black
515-
# params:
516-
# INPUT:
517-
# name: dem.tif
518-
# type: raster
519-
# NEAR: 15
520-
# WHITE: false
521-
# results:
522-
# OUTPUT:
523-
# hash: fff4a08498e93494f3f2cf1a9074451e6fd68341849aedc9e2c45e6a
524-
# type: rasterhash
525-
#
513+
- algorithm: gdal:nearblack
514+
name: standard near black
515+
params:
516+
INPUT:
517+
name: dem.tif
518+
type: raster
519+
NEAR: 15
520+
WHITE: false
521+
results:
522+
OUTPUT:
523+
hash: fff4a08498e93494f3f2cf1a9074451e6fd68341849aedc9e2c45e6a
524+
type: rasterhash
525+
526526
# - algorithm: gdal:tpitopographicpositionindex
527527
# name: standard TPI
528528
# params:

0 commit comments

Comments
 (0)