QGIS API Documentation  3.16.0-Hannover (43b64b13f3)
qgsalgorithmhillshade.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  qgsalgorithmhillshade.cpp
3  ---------------------
4  begin : November 2019
5  copyright : (C) 2019 by Alexander Bruy
6  email : alexander dot bruy at gmail dot com
7  ***************************************************************************/
8 
9 /***************************************************************************
10  * *
11  * This program is free software; you can redistribute it and/or modify *
12  * it under the terms of the GNU General Public License as published by *
13  * the Free Software Foundation; either version 2 of the License, or *
14  * (at your option) any later version. *
15  * *
16  ***************************************************************************/
17 
18 #include "qgsalgorithmhillshade.h"
19 #include "qgsrasterfilewriter.h"
20 #include "qgshillshadefilter.h"
21 
23 
24 QString QgsHillshadeAlgorithm::name() const
25 {
26  return QStringLiteral( "hillshade" );
27 }
28 
29 QString QgsHillshadeAlgorithm::displayName() const
30 {
31  return QObject::tr( "Hillshade" );
32 }
33 
34 QStringList QgsHillshadeAlgorithm::tags() const
35 {
36  return QObject::tr( "dem,hillshade,terrain" ).split( ',' );
37 }
38 
39 QString QgsHillshadeAlgorithm::group() const
40 {
41  return QObject::tr( "Raster terrain analysis" );
42 }
43 
44 QString QgsHillshadeAlgorithm::groupId() const
45 {
46  return QStringLiteral( "rasterterrainanalysis" );
47 }
48 
49 QString QgsHillshadeAlgorithm::shortHelpString() const
50 {
51  return QObject::tr( "This algorithm calculates the hillshade of the Digital Terrain Model in input." )
52  + QStringLiteral( "\n\n" )
53  + QObject::tr( "The shading of the layer is calculated according to the sun position (azimuth and elevation)." );
54 }
55 
56 QgsHillshadeAlgorithm *QgsHillshadeAlgorithm::createInstance() const
57 {
58  return new QgsHillshadeAlgorithm();
59 }
60 
61 void QgsHillshadeAlgorithm::initAlgorithm( const QVariantMap & )
62 {
63  addParameter( new QgsProcessingParameterRasterLayer( QStringLiteral( "INPUT" ), QObject::tr( "Elevation layer" ) ) );
64  addParameter( new QgsProcessingParameterNumber( QStringLiteral( "Z_FACTOR" ), QObject::tr( "Z factor" ),
65  QgsProcessingParameterNumber::Double, 1, false, 0 ) );
66  addParameter( new QgsProcessingParameterNumber( QStringLiteral( "AZIMUTH" ), QObject::tr( "Azimuth (horizontal angle)" ),
67  QgsProcessingParameterNumber::Double, 300, false, 0, 360 ) );
68  addParameter( new QgsProcessingParameterNumber( QStringLiteral( "V_ANGLE" ), QObject::tr( "Vertical angle" ),
69  QgsProcessingParameterNumber::Double, 40, false, 0, 90 ) );
70 
71  addParameter( new QgsProcessingParameterRasterDestination( QStringLiteral( "OUTPUT" ), QObject::tr( "Hillshade" ) ) );
72 }
73 
74 QVariantMap QgsHillshadeAlgorithm::processAlgorithm( const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback *feedback )
75 {
76  QgsRasterLayer *inputLayer = parameterAsRasterLayer( parameters, QStringLiteral( "INPUT" ), context );
77 
78  if ( !inputLayer )
79  throw QgsProcessingException( invalidRasterError( parameters, QStringLiteral( "INPUT" ) ) );
80 
81  double zFactor = parameterAsDouble( parameters, QStringLiteral( "Z_FACTOR" ), context );
82  double azimuth = parameterAsDouble( parameters, QStringLiteral( "AZIMUTH" ), context );
83  double vAngle = parameterAsDouble( parameters, QStringLiteral( "V_ANGLE" ), context );
84 
85  const QString outputFile = parameterAsOutputLayer( parameters, QStringLiteral( "OUTPUT" ), context );
86  QFileInfo fi( outputFile );
87  const QString outputFormat = QgsRasterFileWriter::driverForExtension( fi.suffix() );
88 
89  QgsHillshadeFilter hillshade( inputLayer->source(), outputFile, outputFormat, azimuth, vAngle );
90  hillshade.setZFactor( zFactor );
91  hillshade.processRaster( feedback );
92 
93  QVariantMap outputs;
94  outputs.insert( QStringLiteral( "OUTPUT" ), outputFile );
95  return outputs;
96 }
97 
QgsProcessingParameterNumber::Double
@ Double
Double/float values.
Definition: qgsprocessingparameters.h:1967
QgsProcessingParameterNumber
A numeric parameter for processing algorithms.
Definition: qgsprocessingparameters.h:1960
QgsProcessingFeedback
Base class for providing feedback from a processing algorithm.
Definition: qgsprocessingfeedback.h:38
QgsRasterFileWriter::driverForExtension
static QString driverForExtension(const QString &extension)
Returns the GDAL driver name for a specified file extension.
Definition: qgsrasterfilewriter.cpp:1063
QgsProcessingParameterRasterDestination
A raster layer destination parameter, for specifying the destination path for a raster layer created ...
Definition: qgsprocessingparameters.h:3066
qgshillshadefilter.h
qgsrasterfilewriter.h
QgsProcessingContext
Contains information about the context in which a processing algorithm is executed.
Definition: qgsprocessingcontext.h:44
qgsalgorithmhillshade.h
QgsProcessingParameterRasterLayer
A raster layer parameter for processing algorithms.
Definition: qgsprocessingparameters.h:2223
QgsRasterLayer
Represents a raster layer.
Definition: qgsrasterlayer.h:71
QgsHillshadeFilter
Definition: qgshillshadefilter.h:29
QgsMapLayer::source
QString source() const
Returns the source for the layer.
Definition: qgsmaplayer.cpp:192
QgsProcessingException
Custom exception class for processing related exceptions.
Definition: qgsexception.h:83