25using namespace Qt::StringLiterals;
30QString QgsReliefAlgorithm::name()
const
35QString QgsReliefAlgorithm::displayName()
const
37 return QObject::tr(
"Relief" );
40QStringList QgsReliefAlgorithm::tags()
const
42 return QObject::tr(
"elevation" ).split(
',' );
45QString QgsReliefAlgorithm::group()
const
47 return QObject::tr(
"Raster terrain analysis" );
50QString QgsReliefAlgorithm::groupId()
const
52 return u
"rasterterrainanalysis"_s;
55QgsReliefAlgorithm::~QgsReliefAlgorithm() =
default;
57void QgsReliefAlgorithm::initAlgorithm(
const QVariantMap & )
59 auto inputParam = std::make_unique<QgsProcessingParameterRasterLayer>( u
"INPUT"_s, QObject::tr(
"Elevation layer" ) );
60 inputParam->setHelp( QObject::tr(
"The digital elevation model (DEM) raster layer to use for calculating the shaded relief." ) );
61 addParameter( inputParam.release() );
64 zFactorParam->setHelp( QObject::tr(
"The Z factor allows you to exaggerate or compress the elevation values. A value of 1.0 means no exaggeration. Values greater than 1.0 exaggerate the relief." ) );
65 addParameter( zFactorParam.release() );
67 auto autoColorsParam = std::make_unique<QgsProcessingParameterBoolean>( u
"AUTO_COLORS"_s, QObject::tr(
"Generate relief classes automatically" ),
false );
68 autoColorsParam->setHelp( QObject::tr(
"If checked, relief classes (colors and elevation ranges) will be generated automatically based on the input layer's statistics." ) );
69 addParameter( autoColorsParam.release() );
71 auto colorsParam = std::make_unique<QgsProcessingParameterReliefColors>( u
"COLORS"_s, QObject::tr(
"Relief colors" ), u
"INPUT"_s,
true );
73 QObject::tr(
"The color classes to use for the relief. Each class is defined by a minimum elevation, maximum elevation, and a color. Ignored if 'Generate relief classes automatically' is checked." )
75 addParameter( colorsParam.release() );
78 outputNodataParam->setHelp( QObject::tr(
"The NODATA value to use in the output raster." ) );
80 addParameter( outputNodataParam.release() );
82 auto creationOptsParam = std::make_unique<QgsProcessingParameterString>( u
"CREATION_OPTIONS"_s, QObject::tr(
"Creation options" ), QVariant(),
false,
true );
83 creationOptsParam->setHelp( QObject::tr(
"The raster creation options for the output raster. These options control things like colorimetry, compression, etc." ) );
84 creationOptsParam->setMetadata( QVariantMap( { { u
"widget_wrapper"_s, QVariantMap( { { u
"widget_type"_s, u
"rasteroptions"_s } } ) } } ) );
86 addParameter( creationOptsParam.release() );
88 auto outputParam = std::make_unique<QgsProcessingParameterRasterDestination>( u
"OUTPUT"_s, QObject::tr(
"Relief" ) );
89 outputParam->setHelp( QObject::tr(
"The output shaded relief raster layer." ) );
90 addParameter( outputParam.release() );
93 = std::make_unique<QgsProcessingParameterFileDestination>( u
"FREQUENCY_DISTRIBUTION"_s, QObject::tr(
"Frequency distribution" ), QObject::tr(
"CSV files (*.csv)" ), QVariant(),
true,
false );
94 freqDistParam->setHelp( QObject::tr(
"An optional CSV file to save the frequency distribution of the relief classes." ) );
95 addParameter( freqDistParam.release() );
98QString QgsReliefAlgorithm::shortHelpString()
const
100 return QObject::tr(
"This algorithm creates a shaded relief layer from digital elevation data." );
103QString QgsReliefAlgorithm::shortDescription()
const
105 return QObject::tr(
"Creates a shaded relief layer from digital elevation data." );
108QgsReliefAlgorithm *QgsReliefAlgorithm::createInstance()
const
110 return new QgsReliefAlgorithm();
115 QgsRasterLayer *layer = parameterAsRasterLayer( parameters, u
"INPUT"_s, context );
121 mLayerSource = layer->
source();
127 const double zFactor = parameterAsDouble( parameters, u
"Z_FACTOR"_s, context );
128 const bool automaticColors = parameterAsBoolean( parameters, u
"AUTO_COLORS"_s, context );
129 const QString creationOptions = parameterAsString( parameters, u
"CREATION_OPTIONS"_s, context ).trimmed();
130 const double outputNodata = parameterAsDouble( parameters, u
"NODATA"_s, context );
131 const QString outputFile = parameterAsOutputLayer( parameters, u
"OUTPUT"_s, context );
132 const QString outputFormat = parameterAsOutputRasterFormat( parameters, u
"OUTPUT"_s, context );
133 const QString frequencyDistribution = parameterAsFileOutput( parameters, u
"FREQUENCY_DISTRIBUTION"_s, context );
135 QgsRelief relief( mLayerSource, outputFile, outputFormat );
137 QList<QgsRasterReliefColor> reliefColors;
138 if ( automaticColors )
140 reliefColors = relief.calculateOptimizedReliefClasses();
144 reliefColors = qgis::down_cast< const QgsProcessingParameterReliefColors * >( parameterDefinition( u
"COLORS"_s ) )->valueAsReliefColors( parameters.value( u
"COLORS"_s ), context );
145 if ( reliefColors.isEmpty() )
146 throw QgsProcessingException( QObject::tr(
"Specify relief colors or activate \"Generate relief classes automatically\" option." ) );
149 relief.setReliefColors( reliefColors );
150 relief.setZFactor( zFactor );
152 if ( !creationOptions.isEmpty() )
154 relief.setCreationOptions( creationOptions.split(
'|' ) );
156 relief.setOutputNodataValue( outputNodata );
158 if ( !frequencyDistribution.isEmpty() )
159 relief.exportFrequencyDistributionToCsv( frequencyDistribution );
174 throw QgsProcessingException( QObject::tr(
"Input raster size is too small (at least 3 rows needed)." ) );
177 feedback->
pushInfo( QObject::tr(
"Canceled." ) );
182 outputs.insert( u
"OUTPUT"_s, outputFile );
183 if ( !frequencyDistribution.isEmpty() )
184 outputs.insert( u
"FREQUENCY_DISTRIBUTION"_s, frequencyDistribution );
@ Advanced
Parameter is an advanced parameter which should be hidden from users by default.
@ Double
Double/float values.
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.
Base class for providing feedback from a processing algorithm.
virtual void pushInfo(const QString &info)
Pushes a general informational message from the algorithm.
Represents a raster layer.
Produces colored relief rasters from DEM.
Result
Calculation results.
@ Canceled
Operation was canceled.
@ Success
Calculation succeeded.
@ OutputCreationFailed
Creation of output layer failed.
@ InvalidInput
Invalid input layer.
@ InvalidInputSize
Input raster was too small (at least 3 rows are required).