@@ -82,6 +82,11 @@ bool QgsRasterLayerUniqueValuesReportAlgorithm::prepareAlgorithm( const QVariant
8282 if ( !layer )
8383 throw QgsProcessingException ( invalidRasterError ( parameters, QStringLiteral ( " INPUT" ) ) );
8484
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+
8590 mInterface .reset ( layer->dataProvider ()->clone () );
8691 mHasNoDataValue = layer->dataProvider ()->sourceHasNoDataValue ( band );
8792 mLayerWidth = layer->width ();
@@ -97,7 +102,6 @@ bool QgsRasterLayerUniqueValuesReportAlgorithm::prepareAlgorithm( const QVariant
97102
98103QVariantMap QgsRasterLayerUniqueValuesReportAlgorithm::processAlgorithm ( const QVariantMap ¶meters, QgsProcessingContext &context, QgsProcessingFeedback *feedback )
99104{
100- int band = parameterAsInt ( parameters, QStringLiteral ( " BAND" ), context );
101105 QString outputFile = parameterAsFileOutput ( parameters, QStringLiteral ( " OUTPUT_HTML_FILE" ), context );
102106
103107 QString areaUnit = QgsUnitTypes::toAbbreviatedString ( QgsUnitTypes::distanceToAreaUnit ( mCrs .mapUnits () ) );
@@ -128,14 +132,14 @@ QVariantMap QgsRasterLayerUniqueValuesReportAlgorithm::processAlgorithm( const Q
128132 QgsRasterIterator iter ( mInterface .get () );
129133 iter.setMaximumTileWidth ( maxWidth );
130134 iter.setMaximumTileHeight ( maxHeight );
131- iter.startRasterRead ( band , mLayerWidth , mLayerHeight , mExtent );
135+ iter.startRasterRead ( mBand , mLayerWidth , mLayerHeight , mExtent );
132136
133137 int iterLeft = 0 ;
134138 int iterTop = 0 ;
135139 int iterCols = 0 ;
136140 int iterRows = 0 ;
137141 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 ) )
139143 {
140144 feedback->setProgress ( 100 * ( ( iterTop / maxHeight * nbBlocksWidth ) + iterLeft / maxWidth ) / nbBlocks );
141145 for ( int row = 0 ; row < iterRows; row++ )
@@ -182,7 +186,7 @@ QVariantMap QgsRasterLayerUniqueValuesReportAlgorithm::processAlgorithm( const Q
182186
183187 QTextStream out ( &file );
184188 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 );
186190 out << QObject::tr ( " <p>%1: %2</p>\n " ).arg ( QObject::tr ( " Extent" ), mExtent .toString () );
187191 out << QObject::tr ( " <p>%1: %2 (%3)</p>\n " ).arg ( QObject::tr ( " Projection" ), mCrs .description (), mCrs .authid () );
188192 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