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
22 ///@cond PRIVATE
23
name() const24 QString QgsRuggednessAlgorithm::name() const
25 {
26 return QStringLiteral( "ruggednessindex" );
27 }
28
displayName() const29 QString QgsRuggednessAlgorithm::displayName() const
30 {
31 return QObject::tr( "Ruggedness index" );
32 }
33
tags() const34 QStringList QgsRuggednessAlgorithm::tags() const
35 {
36 return QObject::tr( "dem,ruggedness,index,terrain" ).split( ',' );
37 }
38
group() const39 QString QgsRuggednessAlgorithm::group() const
40 {
41 return QObject::tr( "Raster terrain analysis" );
42 }
43
groupId() const44 QString QgsRuggednessAlgorithm::groupId() const
45 {
46 return QStringLiteral( "rasterterrainanalysis" );
47 }
48
shortHelpString() const49 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
createInstance() const59 QgsRuggednessAlgorithm *QgsRuggednessAlgorithm::createInstance() const
60 {
61 return new QgsRuggednessAlgorithm();
62 }
63
initAlgorithm(const QVariantMap &)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
processAlgorithm(const QVariantMap & parameters,QgsProcessingContext & context,QgsProcessingFeedback * feedback)73 QVariantMap QgsRuggednessAlgorithm::processAlgorithm( const QVariantMap ¶meters, 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
95 ///@endcond
96