@@ -82,6 +82,11 @@ bool QgsRasterLayerUniqueValuesReportAlgorithm::prepareAlgorithm( const QVariant
82
82
if ( !layer )
83
83
throw QgsProcessingException ( invalidRasterError ( parameters, QStringLiteral ( " INPUT" ) ) );
84
84
85
+ mBand = parameterAsInt ( parameters, QStringLiteral ( " BAND" ), context );
86
+ if ( mBand < 1 || mBand > layer->bandCount () )
87
+ throw QgsProcessingException ( QObject::tr ( " Invalid band number for BAND (%1): Valid values for input raster are 1 to %2" ).arg ( mBand )
88
+ .arg ( layer->bandCount () ) );
89
+
85
90
mInterface .reset ( layer->dataProvider ()->clone () );
86
91
mHasNoDataValue = layer->dataProvider ()->sourceHasNoDataValue ( band );
87
92
mLayerWidth = layer->width ();
@@ -97,7 +102,6 @@ bool QgsRasterLayerUniqueValuesReportAlgorithm::prepareAlgorithm( const QVariant
97
102
98
103
QVariantMap QgsRasterLayerUniqueValuesReportAlgorithm::processAlgorithm ( const QVariantMap ¶meters, QgsProcessingContext &context, QgsProcessingFeedback *feedback )
99
104
{
100
- int band = parameterAsInt ( parameters, QStringLiteral ( " BAND" ), context );
101
105
QString outputFile = parameterAsFileOutput ( parameters, QStringLiteral ( " OUTPUT_HTML_FILE" ), context );
102
106
103
107
QString areaUnit = QgsUnitTypes::toAbbreviatedString ( QgsUnitTypes::distanceToAreaUnit ( mCrs .mapUnits () ) );
@@ -128,14 +132,14 @@ QVariantMap QgsRasterLayerUniqueValuesReportAlgorithm::processAlgorithm( const Q
128
132
QgsRasterIterator iter ( mInterface .get () );
129
133
iter.setMaximumTileWidth ( maxWidth );
130
134
iter.setMaximumTileHeight ( maxHeight );
131
- iter.startRasterRead ( band , mLayerWidth , mLayerHeight , mExtent );
135
+ iter.startRasterRead ( mBand , mLayerWidth , mLayerHeight , mExtent );
132
136
133
137
int iterLeft = 0 ;
134
138
int iterTop = 0 ;
135
139
int iterCols = 0 ;
136
140
int iterRows = 0 ;
137
141
std::unique_ptr< QgsRasterBlock > rasterBlock;
138
- while ( iter.readNextRasterPart ( band , iterCols, iterRows, rasterBlock, iterLeft, iterTop ) )
142
+ while ( iter.readNextRasterPart ( mBand , iterCols, iterRows, rasterBlock, iterLeft, iterTop ) )
139
143
{
140
144
feedback->setProgress ( 100 * ( ( iterTop / maxHeight * nbBlocksWidth ) + iterLeft / maxWidth ) / nbBlocks );
141
145
for ( int row = 0 ; row < iterRows; row++ )
@@ -182,7 +186,7 @@ QVariantMap QgsRasterLayerUniqueValuesReportAlgorithm::processAlgorithm( const Q
182
186
183
187
QTextStream out ( &file );
184
188
out << QStringLiteral ( " <html><head><meta http-equiv=\" Content-Type\" content=\" text/html;charset=utf-8\" /></head><body>\n " );
185
- out << QStringLiteral ( " <p>%1: %2 (%3 %4)</p>\n " ).arg ( QObject::tr ( " Analyzed file" ), mSource , QObject::tr ( " band" ) ).arg ( band );
189
+ out << QStringLiteral ( " <p>%1: %2 (%3 %4)</p>\n " ).arg ( QObject::tr ( " Analyzed file" ), mSource , QObject::tr ( " band" ) ).arg ( mBand );
186
190
out << QObject::tr ( " <p>%1: %2</p>\n " ).arg ( QObject::tr ( " Extent" ), mExtent .toString () );
187
191
out << QObject::tr ( " <p>%1: %2 (%3)</p>\n " ).arg ( QObject::tr ( " Projection" ), mCrs .description (), mCrs .authid () );
188
192
out << QObject::tr ( " <p>%1: %2 (%3 %4)</p>\n " ).arg ( QObject::tr ( " Width in pixels" ) ).arg ( mLayerWidth ).arg ( QObject::tr ( " units per pixel" ) ).arg ( mRasterUnitsPerPixelX );
0 commit comments