mirror of
https://github.com/qgis/QGIS.git
synced 2025-10-16 00:05:45 -04:00
parent
159f7c4018
commit
96e7f9eb5a
@ -786,6 +786,8 @@ Data providers that have NativeRasterAttributeTable provider capability will try
|
||||
.. versionadded:: 3.30
|
||||
%End
|
||||
|
||||
virtual QString bandDescription( int bandNumber ); // Note: not const because GDAL init on demand
|
||||
|
||||
|
||||
signals:
|
||||
|
||||
|
@ -626,6 +626,39 @@ QString QgsGdalProvider::htmlMetadata()
|
||||
return myMetadata;
|
||||
}
|
||||
|
||||
QString QgsGdalProvider::bandDescription( int bandNumber )
|
||||
{
|
||||
QMutexLocker locker( mpMutex );
|
||||
if ( !initIfNeeded() )
|
||||
return QString();
|
||||
|
||||
GDALDriverH hDriver = GDALGetDriverByName( mDriverName.toLocal8Bit().constData() );
|
||||
if ( !hDriver )
|
||||
return QString();
|
||||
|
||||
if ( GDALGetRasterCount( mGdalDataset ) > 0 )
|
||||
{
|
||||
GDALRasterBandH gdalBand = GDALGetRasterBand( mGdalDataset, bandNumber );
|
||||
if ( gdalBand )
|
||||
{
|
||||
char **GDALmetadata = GDALGetMetadata( gdalBand, nullptr );
|
||||
if ( GDALmetadata )
|
||||
{
|
||||
const QStringList metadata = QgsOgrUtils::cStringListToQStringList( GDALmetadata );
|
||||
const auto description = std::find_if( metadata.constBegin(), metadata.constEnd(), []( const QString & md )
|
||||
{
|
||||
return md.startsWith( QStringLiteral( "DESCRIPTION=" ) );
|
||||
} );
|
||||
if ( description != metadata.constEnd() )
|
||||
{
|
||||
return description->mid( 12 );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return QString();
|
||||
}
|
||||
|
||||
QgsRasterBlock *QgsGdalProvider::block( int bandNo, const QgsRectangle &extent, int width, int height, QgsRasterBlockFeedback *feedback )
|
||||
{
|
||||
std::unique_ptr< QgsRasterBlock > block = std::make_unique< QgsRasterBlock >( dataType( bandNo ), width, height );
|
||||
|
@ -160,6 +160,7 @@ class QgsGdalProvider final: public QgsRasterDataProvider, QgsGdalProviderBase
|
||||
double bandOffset( int bandNo ) const override;
|
||||
QList<QgsColorRampShader::ColorRampItem> colorTable( int bandNo )const override;
|
||||
QString htmlMetadata() override;
|
||||
QString bandDescription( int bandNumber ) override;
|
||||
QStringList subLayers() const override;
|
||||
|
||||
static QList< QgsProviderSublayerDetails > sublayerDetails( GDALDatasetH dataset, const QString &baseUri );
|
||||
|
@ -763,6 +763,12 @@ bool QgsRasterDataProvider::readNativeAttributeTable( QString *errorMessage )
|
||||
return false;
|
||||
}
|
||||
|
||||
QString QgsRasterDataProvider::bandDescription( int bandNumber )
|
||||
{
|
||||
Q_UNUSED( bandNumber )
|
||||
return QString();
|
||||
}
|
||||
|
||||
bool QgsRasterDataProvider::readFileBasedAttributeTable( int bandNumber, const QString &path, QString *errorMessage )
|
||||
{
|
||||
QGIS_PROTECT_QOBJECT_THREAD_ACCESS
|
||||
|
@ -831,6 +831,13 @@ class CORE_EXPORT QgsRasterDataProvider : public QgsDataProvider, public QgsRast
|
||||
*/
|
||||
virtual bool readNativeAttributeTable( QString *errorMessage SIP_OUT = nullptr );
|
||||
|
||||
/**
|
||||
* Returns the description for band \a bandNumber, or an empty string if the band is not valid or has not description.
|
||||
* The default implementation returns an empty string.
|
||||
* \since QGIS 3.34
|
||||
*/
|
||||
virtual QString bandDescription( int bandNumber ); // Note: not const because GDAL init on demand
|
||||
|
||||
|
||||
signals:
|
||||
|
||||
|
@ -166,5 +166,7 @@ QString QgsRasterBandComboBox::displayBandName( QgsRasterDataProvider *provider,
|
||||
if ( !provider )
|
||||
return QString();
|
||||
|
||||
return provider->displayBandName( band );
|
||||
QString name { provider->displayBandName( band ) };
|
||||
const QString description { provider->bandDescription( band ) };
|
||||
return description.isEmpty() ? name : QStringLiteral( "%1 - %2" ).arg( name, description );
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user