mirror of
https://github.com/qgis/QGIS.git
synced 2025-10-17 00:09:36 -04:00
parent
159f7c4018
commit
96e7f9eb5a
@ -786,6 +786,8 @@ Data providers that have NativeRasterAttributeTable provider capability will try
|
|||||||
.. versionadded:: 3.30
|
.. versionadded:: 3.30
|
||||||
%End
|
%End
|
||||||
|
|
||||||
|
virtual QString bandDescription( int bandNumber ); // Note: not const because GDAL init on demand
|
||||||
|
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
|
|
||||||
|
@ -626,6 +626,39 @@ QString QgsGdalProvider::htmlMetadata()
|
|||||||
return myMetadata;
|
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 )
|
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 );
|
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;
|
double bandOffset( int bandNo ) const override;
|
||||||
QList<QgsColorRampShader::ColorRampItem> colorTable( int bandNo )const override;
|
QList<QgsColorRampShader::ColorRampItem> colorTable( int bandNo )const override;
|
||||||
QString htmlMetadata() override;
|
QString htmlMetadata() override;
|
||||||
|
QString bandDescription( int bandNumber ) override;
|
||||||
QStringList subLayers() const override;
|
QStringList subLayers() const override;
|
||||||
|
|
||||||
static QList< QgsProviderSublayerDetails > sublayerDetails( GDALDatasetH dataset, const QString &baseUri );
|
static QList< QgsProviderSublayerDetails > sublayerDetails( GDALDatasetH dataset, const QString &baseUri );
|
||||||
|
@ -763,6 +763,12 @@ bool QgsRasterDataProvider::readNativeAttributeTable( QString *errorMessage )
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString QgsRasterDataProvider::bandDescription( int bandNumber )
|
||||||
|
{
|
||||||
|
Q_UNUSED( bandNumber )
|
||||||
|
return QString();
|
||||||
|
}
|
||||||
|
|
||||||
bool QgsRasterDataProvider::readFileBasedAttributeTable( int bandNumber, const QString &path, QString *errorMessage )
|
bool QgsRasterDataProvider::readFileBasedAttributeTable( int bandNumber, const QString &path, QString *errorMessage )
|
||||||
{
|
{
|
||||||
QGIS_PROTECT_QOBJECT_THREAD_ACCESS
|
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 );
|
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:
|
signals:
|
||||||
|
|
||||||
|
@ -166,5 +166,7 @@ QString QgsRasterBandComboBox::displayBandName( QgsRasterDataProvider *provider,
|
|||||||
if ( !provider )
|
if ( !provider )
|
||||||
return QString();
|
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