Skip to content

Commit a2b4c21

Browse files
committedMar 7, 2019
Fix raster calculator with multiband rasters
Fixes #21151
1 parent 3919eef commit a2b4c21

File tree

2 files changed

+16
-4
lines changed

2 files changed

+16
-4
lines changed
 

‎src/analysis/raster/qgsrastercalculator.cpp

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -636,9 +636,18 @@ QVector<QgsRasterCalculatorEntry> QgsRasterCalculatorEntry::rasterEntries()
636636
// Safety belt
637637
if ( !( entry.raster && ref.raster ) )
638638
continue;
639-
// Check if a layer with the same data source was already added to the list
639+
// Check if is another band of the same raster
640640
if ( ref.raster->publicSource() == entry.raster->publicSource() )
641-
return false;
641+
{
642+
if ( ref.bandNumber != entry.bandNumber )
643+
{
644+
continue;
645+
}
646+
else // a layer with the same data source was already added to the list
647+
{
648+
return false;
649+
}
650+
}
642651
// If same name but different source
643652
if ( ref.ref == entry.ref )
644653
{
@@ -664,7 +673,7 @@ QVector<QgsRasterCalculatorEntry> QgsRasterCalculatorEntry::rasterEntries()
664673
entry.raster = rlayer;
665674
entry.bandNumber = i + 1;
666675
if ( ! uniqueRasterBandIdentifier( entry ) )
667-
continue;
676+
break;
668677
availableEntries.push_back( entry );
669678
}
670679
}

‎tests/src/analysis/testqgsrastercalculator.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -583,7 +583,10 @@ void TestQgsRasterCalculator::testRasterEntries()
583583
}
584584
QStringList keys( entryMap.keys() );
585585
keys.sort();
586-
QCOMPARE( keys.join( ',' ), QStringLiteral( "dem@1,dem_1@1,landsat@1,landsat_4326@1,slope2@1" ) );
586+
QCOMPARE( keys.join( ',' ), QStringLiteral( "dem@1,dem_1@1,landsat@1,landsat@2,landsat@3,landsat@4,"
587+
"landsat@5,landsat@6,landsat@7,landsat@8,landsat@9,"
588+
"landsat_4326@1,landsat_4326@2,landsat_4326@3,landsat_4326@4,"
589+
"landsat_4326@5,landsat_4326@6,landsat_4326@7,landsat_4326@8,landsat_4326@9,slope2@1" ) );
587590
}
588591

589592
void TestQgsRasterCalculator::errors( )

0 commit comments

Comments
 (0)
Please sign in to comment.