Skip to content

Commit d7a37fa

Browse files
committedJun 13, 2018
Throw exception when invalid band number specified
1 parent 50c28e4 commit d7a37fa

File tree

4 files changed

+14
-6
lines changed

4 files changed

+14
-6
lines changed
 

‎python/plugins/processing/algs/qgis/PointsFromPolygons.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@
3333
QgsFeatureSink,
3434
QgsGeometry,
3535
QgsWkbTypes,
36-
QgsProcessingParameterBand,
3736
QgsPoint,
3837
QgsProcessing,
3938
QgsProcessingException,

‎src/analysis/processing/qgsalgorithmrasterlayeruniquevalues.cpp

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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

98103
QVariantMap QgsRasterLayerUniqueValuesReportAlgorithm::processAlgorithm( const QVariantMap &parameters, 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 );

‎src/analysis/processing/qgsalgorithmrasterlayeruniquevalues.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ class QgsRasterLayerUniqueValuesReportAlgorithm : public QgsProcessingAlgorithm
5353

5454
std::unique_ptr< QgsRasterInterface > mInterface;
5555
bool mHasNoDataValue = false;
56+
int mBand = 1;
5657
int mLayerWidth;
5758
int mLayerHeight;
5859
QgsRectangle mExtent;

‎src/analysis/processing/qgsalgorithmreclassifybylayer.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,11 +71,15 @@ void QgsReclassifyAlgorithmBase::initAlgorithm( const QVariantMap & )
7171
bool QgsReclassifyAlgorithmBase::prepareAlgorithm( const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback *feedback )
7272
{
7373
QgsRasterLayer *layer = parameterAsRasterLayer( parameters, QStringLiteral( "INPUT_RASTER" ), context );
74-
mBand = parameterAsInt( parameters, QStringLiteral( "RASTER_BAND" ), context );
7574

7675
if ( !layer )
7776
throw QgsProcessingException( invalidRasterError( parameters, QStringLiteral( "INPUT_RASTER" ) ) );
7877

78+
mBand = parameterAsInt( parameters, QStringLiteral( "RASTER_BAND" ), context );
79+
if ( mBand < 1 || mBand > layer->bandCount() )
80+
throw QgsProcessingException( QObject::tr( "Invalid band number for RASTER_BAND (%1): Valid values for input raster are 1 to %2" ).arg( mBand )
81+
.arg( layer->bandCount() ) );
82+
7983
mInterface.reset( layer->dataProvider()->clone() );
8084
mExtent = layer->extent();
8185
mCrs = layer->crs();

0 commit comments

Comments
 (0)
Please sign in to comment.