Skip to content

Commit cb144b3

Browse files
seignovertnyalldawson
authored andcommitted
[RASTER] Generate band name with GTiff EXTRA_DIM
Band names can also be retrieved from GeoTIFF files.
1 parent 7e7faad commit cb144b3

File tree

3 files changed

+20
-5
lines changed

3 files changed

+20
-5
lines changed

src/providers/gdal/qgsgdalprovider.cpp

+5-5
Original file line numberDiff line numberDiff line change
@@ -930,7 +930,7 @@ QString QgsGdalProvider::generateBandName( int bandNumber ) const
930930
if ( !const_cast<QgsGdalProvider *>( this )->initIfNeeded() )
931931
return QString();
932932

933-
if ( strcmp( GDALGetDriverShortName( GDALGetDatasetDriver( mGdalDataset ) ), "netCDF" ) == 0 )
933+
if ( strcmp( GDALGetDriverShortName( GDALGetDatasetDriver( mGdalDataset ) ), "netCDF" ) == 0 || strcmp( GDALGetDriverShortName( GDALGetDatasetDriver( mGdalDataset ) ), "GTiff" ) == 0 )
934934
{
935935
char **GDALmetadata = GDALGetMetadata( mGdalDataset, nullptr );
936936

@@ -943,11 +943,11 @@ QString QgsGdalProvider::generateBandName( int bandNumber ) const
943943
i != metadata.constEnd(); ++i )
944944
{
945945
QString val( *i );
946-
if ( !val.startsWith( QLatin1String( "NETCDF_DIM_EXTRA" ) ) && !val.contains( QLatin1String( "#units=" ) ) )
946+
if ( !val.startsWith( QLatin1String( "NETCDF_DIM_EXTRA" ) ) && !val.startsWith( QLatin1String( "GTIFF_DIM_EXTRA" ) ) && !val.contains( QLatin1String( "#units=" ) ) )
947947
continue;
948948
QStringList values = val.split( '=' );
949949
val = values.at( 1 );
950-
if ( values.at( 0 ) == QLatin1String( "NETCDF_DIM_EXTRA" ) )
950+
if ( values.at( 0 ) == QLatin1String( "NETCDF_DIM_EXTRA" ) || values.at( 0 ) == QLatin1String( "GTIFF_DIM_EXTRA" ) )
951951
{
952952
dimExtraValues = val.replace( '{', QString() ).replace( '}', QString() ).split( ',' );
953953
//http://qt-project.org/doc/qt-4.8/qregexp.html#capturedTexts
@@ -970,14 +970,14 @@ QString QgsGdalProvider::generateBandName( int bandNumber ) const
970970
i != metadata.constEnd(); ++i )
971971
{
972972
QString val( *i );
973-
if ( !val.startsWith( QLatin1String( "NETCDF_DIM_" ) ) )
973+
if ( !val.startsWith( QLatin1String( "NETCDF_DIM_" ) ) && !val.startsWith( QLatin1String( "GTIFF_DIM_" ) ) )
974974
continue;
975975
QStringList values = val.split( '=' );
976976
for ( QStringList::const_iterator j = dimExtraValues.constBegin();
977977
j != dimExtraValues.constEnd(); ++j )
978978
{
979979
QString dim = ( *j );
980-
if ( values.at( 0 ) != "NETCDF_DIM_" + dim )
980+
if ( values.at( 0 ) != "NETCDF_DIM_" + dim && values.at( 0 ) != "GTIFF_DIM_" + dim )
981981
continue;
982982
if ( unitsMap.contains( dim ) && !unitsMap[ dim ].isEmpty() && unitsMap[ dim ] != QLatin1String( "none" ) )
983983
bandNameValues.append( dim + '=' + values.at( 1 ) + " (" + unitsMap[ dim ] + ')' );

tests/src/providers/testqgsgdalprovider.cpp

+15
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ class TestQgsGdalProvider : public QObject
5050
void invalidNoDataInSourceIgnored();
5151
void isRepresentableValue();
5252
void mask();
53+
void bandName(); // test band name based on `gtiff` tags (#7317)
5354

5455
private:
5556
QString mTestDataDir;
@@ -221,5 +222,19 @@ void TestQgsGdalProvider::mask()
221222
delete provider;
222223
}
223224

225+
void TestQgsGdalProvider::bandName()
226+
{
227+
QString raster = QStringLiteral( TEST_DATA_DIR ) + "/raster/gtiff_tags.tif";
228+
QgsDataProvider *provider = QgsProviderRegistry::instance()->createProvider( QStringLiteral( "gdal" ), raster, QgsDataProvider::ProviderOptions() );
229+
QgsRasterDataProvider *rp = dynamic_cast< QgsRasterDataProvider * >( provider );
230+
QVERIFY( rp );
231+
if ( rp )
232+
{
233+
qDebug() << "Band Name 1: " << rp->generateBandName( 1 );
234+
QCOMPARE( rp->generateBandName( 1 ), QStringLiteral( "Band 1 / wvln=1.234 (um)" ) );
235+
}
236+
delete provider;
237+
}
238+
224239
QGSTEST_MAIN( TestQgsGdalProvider )
225240
#include "testqgsgdalprovider.moc"

tests/testdata/raster/gtiff_tags.tif

329 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)