|
58 | 58 | #include <QDebug>
|
59 | 59 |
|
60 | 60 | #include <gdalwarper.h>
|
| 61 | +#include <gdal.h> |
61 | 62 | #include <ogr_srs_api.h>
|
62 | 63 | #include <cpl_conv.h>
|
63 | 64 | #include <cpl_string.h>
|
@@ -932,70 +933,78 @@ QString QgsGdalProvider::generateBandName( int bandNumber ) const
|
932 | 933 | if ( !const_cast<QgsGdalProvider *>( this )->initIfNeeded() )
|
933 | 934 | return QString();
|
934 | 935 |
|
935 |
| - if ( strcmp( GDALGetDriverShortName( GDALGetDatasetDriver( mGdalDataset ) ), "netCDF" ) == 0 || strcmp( GDALGetDriverShortName( GDALGetDatasetDriver( mGdalDataset ) ), "GTiff" ) == 0 ) |
936 |
| - { |
937 |
| - char **GDALmetadata = GDALGetMetadata( mGdalDataset, nullptr ); |
938 |
| - |
939 |
| - if ( GDALmetadata ) |
940 |
| - { |
941 |
| - QStringList metadata = QgsOgrUtils::cStringListToQStringList( GDALmetadata ); |
942 |
| - QStringList dimExtraValues; |
943 |
| - QMap< QString, QString > unitsMap; |
944 |
| - for ( QStringList::const_iterator i = metadata.constBegin(); |
945 |
| - i != metadata.constEnd(); ++i ) |
946 |
| - { |
947 |
| - QString val( *i ); |
948 |
| - if ( !val.startsWith( QLatin1String( "NETCDF_DIM_EXTRA" ) ) && !val.startsWith( QLatin1String( "GTIFF_DIM_EXTRA" ) ) && !val.contains( QLatin1String( "#units=" ) ) ) |
949 |
| - continue; |
950 |
| - QStringList values = val.split( '=' ); |
951 |
| - val = values.at( 1 ); |
952 |
| - if ( values.at( 0 ) == QLatin1String( "NETCDF_DIM_EXTRA" ) || values.at( 0 ) == QLatin1String( "GTIFF_DIM_EXTRA" ) ) |
953 |
| - { |
954 |
| - dimExtraValues = val.replace( '{', QString() ).replace( '}', QString() ).split( ',' ); |
955 |
| - //http://qt-project.org/doc/qt-4.8/qregexp.html#capturedTexts |
956 |
| - } |
957 |
| - else |
958 |
| - { |
959 |
| - unitsMap[ values.at( 0 ).split( '#' ).at( 0 )] = val; |
960 |
| - } |
961 |
| - } |
962 |
| - if ( !dimExtraValues.isEmpty() ) |
963 |
| - { |
964 |
| - QStringList bandNameValues; |
965 |
| - GDALRasterBandH gdalBand = GDALGetRasterBand( mGdalDataset, bandNumber ); |
966 |
| - GDALmetadata = GDALGetMetadata( gdalBand, nullptr ); |
| 936 | + QString generatedBandName = QgsRasterDataProvider::generateBandName( bandNumber ); |
| 937 | + GDALRasterBandH myGdalBand = getBand( bandNumber ); |
| 938 | + QString gdalBandName(GDALGetDescription(myGdalBand)); |
967 | 939 |
|
968 |
| - if ( GDALmetadata ) |
969 |
| - { |
970 |
| - metadata = QgsOgrUtils::cStringListToQStringList( GDALmetadata ); |
971 |
| - for ( QStringList::const_iterator i = metadata.constBegin(); |
972 |
| - i != metadata.constEnd(); ++i ) |
973 |
| - { |
974 |
| - QString val( *i ); |
975 |
| - if ( !val.startsWith( QLatin1String( "NETCDF_DIM_" ) ) && !val.startsWith( QLatin1String( "GTIFF_DIM_" ) ) ) |
976 |
| - continue; |
977 |
| - QStringList values = val.split( '=' ); |
978 |
| - for ( QStringList::const_iterator j = dimExtraValues.constBegin(); |
979 |
| - j != dimExtraValues.constEnd(); ++j ) |
980 |
| - { |
981 |
| - QString dim = ( *j ); |
982 |
| - if ( values.at( 0 ) != "NETCDF_DIM_" + dim && values.at( 0 ) != "GTIFF_DIM_" + dim ) |
983 |
| - continue; |
984 |
| - if ( unitsMap.contains( dim ) && !unitsMap[ dim ].isEmpty() && unitsMap[ dim ] != QLatin1String( "none" ) ) |
985 |
| - bandNameValues.append( dim + '=' + values.at( 1 ) + " (" + unitsMap[ dim ] + ')' ); |
986 |
| - else |
987 |
| - bandNameValues.append( dim + '=' + values.at( 1 ) ); |
988 |
| - } |
| 940 | + QgsSettings settings; |
| 941 | + switch(settings.value(QStringLiteral( "/qgis/useOfRasterBandNames" )).toInt()) { |
| 942 | + case 0 : |
| 943 | + return generatedBandName; |
| 944 | + case 1 : |
| 945 | + if ( !gdalBandName.isEmpty() ) { |
| 946 | + return gdalBandName; |
989 | 947 | }
|
990 |
| - } |
991 |
| - |
992 |
| - if ( !bandNameValues.isEmpty() ) |
993 |
| - return tr( "Band" ) + QStringLiteral( " %1 / %2" ) .arg( bandNumber, 1 + ( int ) std::log10( ( float ) bandCount() ), 10, QChar( '0' ) ).arg( bandNameValues.join( QStringLiteral( " / " ) ) ); |
994 |
| - } |
995 |
| - } |
| 948 | + // if we didn't find a band name use the generated one |
| 949 | + break; |
| 950 | + case 2 : |
| 951 | + return gdalBandName + QStringLiteral(" (") + generatedBandName + QStringLiteral(")"); |
| 952 | + case 3 : |
| 953 | + return generatedBandName + QStringLiteral(" (") + gdalBandName + QStringLiteral(")"); |
| 954 | + case 4 : |
| 955 | + if ( strcmp( GDALGetDriverShortName( GDALGetDatasetDriver( mGdalDataset ) ), "netCDF" ) == 0 || strcmp( GDALGetDriverShortName( GDALGetDatasetDriver( mGdalDataset ) ), "GTiff" ) == 0 ) { |
| 956 | + char **GDALmetadata = GDALGetMetadata(mGdalDataset, nullptr); |
| 957 | + |
| 958 | + if (GDALmetadata) { |
| 959 | + QStringList metadata = QgsOgrUtils::cStringListToQStringList(GDALmetadata); |
| 960 | + QStringList dimExtraValues; |
| 961 | + QMap<QString, QString> unitsMap; |
| 962 | + for (QStringList::const_iterator i = metadata.constBegin(); i != metadata.constEnd(); ++i) { |
| 963 | + QString val(*i); |
| 964 | + if (!val.startsWith(QLatin1String("NETCDF_DIM_EXTRA")) && !val.startsWith(QLatin1String("GTIFF_DIM_EXTRA")) && !val.contains(QLatin1String("#units="))) |
| 965 | + continue; |
| 966 | + QStringList values = val.split('='); |
| 967 | + val = values.at(1); |
| 968 | + if (values.at(0) == QLatin1String("NETCDF_DIM_EXTRA") || values.at(0) == QLatin1String("GTIFF_DIM_EXTRA")) { |
| 969 | + dimExtraValues = val.replace('{', QString()).replace('}', QString()).split(','); |
| 970 | + //http://qt-project.org/doc/qt-4.8/qregexp.html#capturedTexts |
| 971 | + } else { |
| 972 | + unitsMap[values.at(0).split('#').at(0)] = val; |
| 973 | + } |
| 974 | + } |
| 975 | + if (!dimExtraValues.isEmpty()) { |
| 976 | + QStringList bandNameValues; |
| 977 | + GDALRasterBandH gdalBand = GDALGetRasterBand(mGdalDataset, bandNumber); |
| 978 | + GDALmetadata = GDALGetMetadata(gdalBand, nullptr); |
| 979 | + |
| 980 | + if (GDALmetadata) { |
| 981 | + metadata = QgsOgrUtils::cStringListToQStringList(GDALmetadata); |
| 982 | + for (QStringList::const_iterator i = metadata.constBegin(); i != metadata.constEnd(); ++i) { |
| 983 | + QString val(*i); |
| 984 | + if (!val.startsWith(QLatin1String("NETCDF_DIM_")) && !val.startsWith(QLatin1String("GTIFF_DIM_"))) |
| 985 | + continue; |
| 986 | + QStringList values = val.split('='); |
| 987 | + for (QStringList::const_iterator j = dimExtraValues.constBegin(); j != dimExtraValues.constEnd(); ++j) { |
| 988 | + QString dim = (*j); |
| 989 | + if (values.at(0) != "NETCDF_DIM_" + dim && values.at(0) != "GTIFF_DIM_" + dim) |
| 990 | + continue; |
| 991 | + if (unitsMap.contains(dim) && !unitsMap[dim].isEmpty() && unitsMap[dim] != QLatin1String("none")) |
| 992 | + bandNameValues.append(dim + '=' + values.at(1) + " (" + unitsMap[dim] + ')'); |
| 993 | + else |
| 994 | + bandNameValues.append(dim + '=' + values.at(1)); |
| 995 | + } |
| 996 | + } |
| 997 | + } |
| 998 | + |
| 999 | + if (!bandNameValues.isEmpty()) |
| 1000 | + return tr("Band") + QStringLiteral(" %1 / %2").arg(bandNumber, 1 + (int) std::log10((float) bandCount()), 10, QChar('0')).arg(bandNameValues.join(QStringLiteral(" / "))); |
| 1001 | + } |
| 1002 | + } |
| 1003 | + } |
| 1004 | + break; |
996 | 1005 | }
|
997 | 1006 |
|
998 |
| - return QgsRasterDataProvider::generateBandName( bandNumber ); |
| 1007 | + return generatedBandName; |
999 | 1008 | }
|
1000 | 1009 |
|
1001 | 1010 | QgsRasterIdentifyResult QgsGdalProvider::identify( const QgsPointXY &point, QgsRaster::IdentifyFormat format, const QgsRectangle &boundingBox, int width, int height, int /*dpi*/ )
|
|
0 commit comments