QGIS API Documentation  3.20.0-Odense (decaadbb31)
qgsalgorithmruggedness.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  qgsalgorithmruggedness.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 "qgsalgorithmruggedness.h"
19 #include "qgsrasterfilewriter.h"
20 #include "qgsruggednessfilter.h"
21 
23 
24 QString QgsRuggednessAlgorithm::name() const
25 {
26  return QStringLiteral( "ruggednessindex" );
27 }
28 
29 QString QgsRuggednessAlgorithm::displayName() const
30 {
31  return QObject::tr( "Ruggedness index" );
32 }
33 
34 QStringList QgsRuggednessAlgorithm::tags() const
35 {
36  return QObject::tr( "dem,ruggedness,index,terrain" ).split( ',' );
37 }
38 
39 QString QgsRuggednessAlgorithm::group() const
40 {
41  return QObject::tr( "Raster terrain analysis" );
42 }
43 
44 QString QgsRuggednessAlgorithm::groupId() const
45 {
46  return QStringLiteral( "rasterterrainanalysis" );
47 }
48 
49 QString QgsRuggednessAlgorithm::shortHelpString() const
50 {
51  return QObject::tr( "This algorithm calculates the quantitative measurement of terrain "
52  "heterogeneity described by Riley et al. (1999)." )
53  + QStringLiteral( "\n\n" )
54  + QObject::tr( "It is calculated for every location, by summarizing the change "
55  "in elevation within the 3x3 pixel grid. Each pixel contains the "
56  "difference in elevation from a center cell and the 8 cells surrounding it." );
57 }
58 
59 QgsRuggednessAlgorithm *QgsRuggednessAlgorithm::createInstance() const
60 {
61  return new QgsRuggednessAlgorithm();
62 }
63 
64 void QgsRuggednessAlgorithm::initAlgorithm( const QVariantMap & )
65 {
66  addParameter( new QgsProcessingParameterRasterLayer( QStringLiteral( "INPUT" ), QObject::tr( "Elevation layer" ) ) );
67  addParameter( new QgsProcessingParameterNumber( QStringLiteral( "Z_FACTOR" ), QObject::tr( "Z factor" ),
68  QgsProcessingParameterNumber::Double, 1, false, 0 ) );
69 
70  addParameter( new QgsProcessingParameterRasterDestination( QStringLiteral( "OUTPUT" ), QObject::tr( "Ruggedness" ) ) );
71 }
72 
73 QVariantMap QgsRuggednessAlgorithm::processAlgorithm( const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback *feedback )
74 {
75  QgsRasterLayer *inputLayer = parameterAsRasterLayer( parameters, QStringLiteral( "INPUT" ), context );
76 
77  if ( !inputLayer )
78  throw QgsProcessingException( invalidRasterError( parameters, QStringLiteral( "INPUT" ) ) );
79 
80  double zFactor = parameterAsDouble( parameters, QStringLiteral( "Z_FACTOR" ), context );
81 
82  const QString outputFile = parameterAsOutputLayer( parameters, QStringLiteral( "OUTPUT" ), context );
83  QFileInfo fi( outputFile );
84  const QString outputFormat = QgsRasterFileWriter::driverForExtension( fi.suffix() );
85 
86  QgsRuggednessFilter ruggedness( inputLayer->source(), outputFile, outputFormat );
87  ruggedness.setZFactor( zFactor );
88  ruggedness.processRaster( feedback );
89 
90  QVariantMap outputs;
91  outputs.insert( QStringLiteral( "OUTPUT" ), outputFile );
92  return outputs;
93 }
94 
QString source() const
Returns the source for the layer.
Contains information about the context in which a processing algorithm is executed.
Custom exception class for processing related exceptions.
Definition: qgsexception.h:83
Base class for providing feedback from a processing algorithm.
A numeric parameter for processing algorithms.
A raster layer destination parameter, for specifying the destination path for a raster layer created ...
A raster layer parameter for processing algorithms.
static QString driverForExtension(const QString &extension)
Returns the GDAL driver name for a specified file extension.
Represents a raster layer.
Calculates the ruggedness index based on a 3x3 moving window.