@@ -104,6 +104,7 @@ QgsRasterLayer::QgsRasterLayer(
104
104
mColorShadingAlgorithm = QgsRasterLayer::UndefinedShader;
105
105
mRasterShader = new QgsRasterShader ();
106
106
107
+ mBandCount = 0 ;
107
108
mHasPyramids = false ;
108
109
mNoDataValue = -9999 ;
109
110
mValidNoDataValue = false ;
@@ -638,7 +639,7 @@ int CPL_STDCALL progressCallback( double dfComplete,
638
639
639
640
unsigned int QgsRasterLayer::bandCount ()
640
641
{
641
- return mRasterStatsList . size () ;
642
+ return mBandCount ;
642
643
}
643
644
644
645
const QString QgsRasterLayer::bandName ( int theBandNo )
@@ -1838,7 +1839,7 @@ bool QgsRasterLayer::identify( const QgsPoint& thePoint, QMap<QString, QString>&
1838
1839
// Outside the raster
1839
1840
for ( int i = 1 ; i <= GDALGetRasterCount ( mGdalDataset ); i++ )
1840
1841
{
1841
- theResults[ tr ( " Band%1 " ). arg ( i )] = tr ( " out of extent" );
1842
+ theResults[ generateBandName ( i ) ] = tr ( " out of extent" );
1842
1843
}
1843
1844
}
1844
1845
else
@@ -1882,7 +1883,8 @@ bool QgsRasterLayer::identify( const QgsPoint& thePoint, QMap<QString, QString>&
1882
1883
{
1883
1884
v.setNum ( value );
1884
1885
}
1885
- theResults[tr ( " Band%1" ).arg ( i )] = v;
1886
+
1887
+ theResults[ generateBandName ( i ) ] = v;
1886
1888
1887
1889
CPLFree ( data );
1888
1890
}
@@ -4888,6 +4890,37 @@ void QgsRasterLayer::closeDataset()
4888
4890
mRasterStatsList .clear ();
4889
4891
}
4890
4892
4893
+ QString QgsRasterLayer::generateBandName ( int theBandNumber )
4894
+ {
4895
+ // Calculate magnitude of band count for padding
4896
+ QString myBandName = tr ( " Band" ) + " " ;
4897
+ int myBandCount = bandCount ();
4898
+ int myLeadingZeros = 0 ;
4899
+ int myWholeNumber = myBandCount / 10 ;
4900
+ while ( myWholeNumber > 0 )
4901
+ {
4902
+ myLeadingZeros++;
4903
+ myWholeNumber = myBandCount / pow ( 10 , myLeadingZeros + 1 );
4904
+ }
4905
+
4906
+ // Pad the band number of needed
4907
+ int myMagnitude = 0 ;
4908
+ myWholeNumber = theBandNumber / 10 ;
4909
+ while ( myWholeNumber > 0 )
4910
+ {
4911
+ myMagnitude++;
4912
+ myWholeNumber = theBandNumber / pow ( 10 , myMagnitude + 1 );
4913
+ }
4914
+
4915
+ for ( int myPadder = 0 ; myPadder < myLeadingZeros - myMagnitude; myPadder++ )
4916
+ {
4917
+ myBandName += " 0" ;
4918
+ }
4919
+ myBandName += QString::number ( theBandNumber );
4920
+
4921
+ return myBandName;
4922
+ }
4923
+
4891
4924
/* *
4892
4925
* This method looks to see if a given band name exists.
4893
4926
*@note This function is no longer really needed and about to be removed
@@ -5166,13 +5199,12 @@ bool QgsRasterLayer::readFile( QString const &theFilename )
5166
5199
mRasterTransparency .initializeTransparentPixelList ( mNoDataValue );
5167
5200
}
5168
5201
5169
- // initialise the raster band stats and contrast enhancement vector
5170
- for ( int i = 1 ; i <= GDALGetRasterCount ( mGdalDataset ) ; i++ )
5202
+ mBandCount = GDALGetRasterCount ( mGdalDataset );
5203
+ for ( int i = 1 ; i <= mBandCount ; i++ )
5171
5204
{
5172
5205
GDALRasterBandH myGdalBand = GDALGetRasterBand ( mGdalDataset , i );
5173
5206
QgsRasterBandStats myRasterBandStats;
5174
- // myRasterBandStats.bandName = myColorQString ;
5175
- myRasterBandStats.bandName = " Band " + QString::number ( i );
5207
+ myRasterBandStats.bandName = generateBandName ( i );
5176
5208
myRasterBandStats.bandNumber = i;
5177
5209
myRasterBandStats.statsGathered = false ;
5178
5210
myRasterBandStats.histogramVector = new QgsRasterBandStats::HistogramVector ();
@@ -5347,12 +5379,34 @@ QString QgsRasterLayer::validateBandName( QString const & theBandName )
5347
5379
}
5348
5380
QgsDebugMsg ( " No matching band name found in raster band stats" );
5349
5381
5382
+ QgsDebugMsg ( " Testing for non zero-buffered names" );
5383
+ // TODO Remove test in v2.0 or earlier
5384
+ QStringList myBandNameComponents = theBandName.split ( " " );
5385
+ if ( myBandNameComponents.size () == 2 )
5386
+ {
5387
+ int myBandNumber = myBandNameComponents.at ( 1 ).toInt ();
5388
+ if ( myBandNumber > 0 )
5389
+ {
5390
+ QString myBandName = generateBandName ( myBandNumber );
5391
+ for ( int myIterator = 0 ; myIterator < mRasterStatsList .size (); ++myIterator )
5392
+ {
5393
+ // find out the name of this band
5394
+ if ( mRasterStatsList [myIterator].bandName == myBandName )
5395
+ {
5396
+ QgsDebugMsg ( " Matching band name found" );
5397
+ return myBandName;
5398
+ }
5399
+ }
5400
+ }
5401
+ }
5402
+
5350
5403
QgsDebugMsg ( " Testing older naming format" );
5351
5404
// See of the band in an older format #:something.
5352
- // TODO Remove test in v2.0
5405
+ // TODO Remove test in v2.0 or earlier
5406
+ myBandNameComponents.clear ();
5353
5407
if ( theBandName.contains ( ' :' ) )
5354
5408
{
5355
- QStringList myBandNameComponents = theBandName.split ( " :" );
5409
+ myBandNameComponents = theBandName.split ( " :" );
5356
5410
if ( myBandNameComponents.size () == 2 )
5357
5411
{
5358
5412
int myBandNumber = myBandNameComponents.at ( 0 ).toInt ();
0 commit comments