mirror of
https://github.com/qgis/QGIS.git
synced 2025-11-22 00:14:55 -05:00
[raster] Allow raster providers to hint whether resampling is beneficial
For some providers, such as tiled WMTS/XYZ/AMS, resampling is not always visually beneficial and can lead to larger downloads
This commit is contained in:
parent
063d29b256
commit
efeb8b5e32
@ -75,6 +75,7 @@ Base class for raster data providers.
|
||||
NoProviderCapabilities,
|
||||
ReadLayerMetadata,
|
||||
WriteLayerMetadata,
|
||||
ProviderHintBenefitsFromResampling
|
||||
};
|
||||
|
||||
typedef QFlags<QgsRasterDataProvider::ProviderCapability> ProviderCapabilities;
|
||||
|
||||
@ -99,6 +99,7 @@ class CORE_EXPORT QgsRasterDataProvider : public QgsDataProvider, public QgsRast
|
||||
NoProviderCapabilities = 0, //!< Provider has no capabilities
|
||||
ReadLayerMetadata = 1 << 1, //!< Provider can read layer metadata from data store. Since QGIS 3.0. See QgsDataProvider::layerMetadata()
|
||||
WriteLayerMetadata = 1 << 2, //!< Provider can write layer metadata to the data store. Since QGIS 3.0. See QgsDataProvider::writeLayerMetadata()
|
||||
ProviderHintBenefitsFromResampling = 1 << 3 //!< Provider benefits from resampling and should apply user default resampling settings (since QGIS 3.10)
|
||||
};
|
||||
|
||||
//! Provider capabilities
|
||||
|
||||
@ -754,26 +754,29 @@ void QgsRasterLayer::setDataProvider( QString const &provider, const QgsDataProv
|
||||
QgsHueSaturationFilter *hueSaturationFilter = new QgsHueSaturationFilter();
|
||||
mPipe.set( hueSaturationFilter );
|
||||
|
||||
//resampler (must be after renderer)
|
||||
// resampler (must be after renderer)
|
||||
QgsRasterResampleFilter *resampleFilter = new QgsRasterResampleFilter();
|
||||
mPipe.set( resampleFilter );
|
||||
|
||||
QgsSettings settings;
|
||||
QString resampling = settings.value( QStringLiteral( "/Raster/defaultZoomedInResampling" ), QStringLiteral( "nearest neighbour" ) ).toString();
|
||||
if ( resampling == QStringLiteral( "bilinear" ) )
|
||||
if ( mDataProvider->providerCapabilities() & QgsRasterDataProvider::ProviderHintBenefitsFromResampling )
|
||||
{
|
||||
resampleFilter->setZoomedInResampler( new QgsBilinearRasterResampler() );
|
||||
QgsSettings settings;
|
||||
QString resampling = settings.value( QStringLiteral( "/Raster/defaultZoomedInResampling" ), QStringLiteral( "nearest neighbour" ) ).toString();
|
||||
if ( resampling == QStringLiteral( "bilinear" ) )
|
||||
{
|
||||
resampleFilter->setZoomedInResampler( new QgsBilinearRasterResampler() );
|
||||
}
|
||||
else if ( resampling == QStringLiteral( "cubic" ) )
|
||||
{
|
||||
resampleFilter->setZoomedInResampler( new QgsCubicRasterResampler() );
|
||||
}
|
||||
resampling = settings.value( QStringLiteral( "/Raster/defaultZoomedOutResampling" ), QStringLiteral( "nearest neighbour" ) ).toString();
|
||||
if ( resampling == QStringLiteral( "bilinear" ) )
|
||||
{
|
||||
resampleFilter->setZoomedOutResampler( new QgsBilinearRasterResampler() );
|
||||
}
|
||||
resampleFilter->setMaxOversampling( settings.value( QStringLiteral( "/Raster/defaultOversampling" ), 2.0 ).toDouble() );
|
||||
}
|
||||
else if ( resampling == QStringLiteral( "cubic" ) )
|
||||
{
|
||||
resampleFilter->setZoomedInResampler( new QgsCubicRasterResampler() );
|
||||
}
|
||||
resampling = settings.value( QStringLiteral( "/Raster/defaultZoomedOutResampling" ), QStringLiteral( "nearest neighbour" ) ).toString();
|
||||
if ( resampling == QStringLiteral( "bilinear" ) )
|
||||
{
|
||||
resampleFilter->setZoomedOutResampler( new QgsBilinearRasterResampler() );
|
||||
}
|
||||
resampleFilter->setMaxOversampling( settings.value( QStringLiteral( "/Raster/defaultOversampling" ), 2.0 ).toDouble() );
|
||||
|
||||
// projector (may be anywhere in pipe)
|
||||
QgsRasterProjector *projector = new QgsRasterProjector;
|
||||
|
||||
@ -1379,6 +1379,11 @@ QString QgsGdalProvider::description() const
|
||||
return PROVIDER_DESCRIPTION;
|
||||
}
|
||||
|
||||
QgsRasterDataProvider::ProviderCapabilities QgsGdalProvider::providerCapabilities() const
|
||||
{
|
||||
return QgsRasterDataProvider::ProviderHintBenefitsFromResampling;
|
||||
}
|
||||
|
||||
// This is used also by global isValidRasterFileName
|
||||
QStringList QgsGdalProvider::subLayers( GDALDatasetH dataset )
|
||||
{
|
||||
|
||||
@ -99,6 +99,7 @@ class QgsGdalProvider : public QgsRasterDataProvider, QgsGdalProviderBase
|
||||
|
||||
QString name() const override;
|
||||
QString description() const override;
|
||||
QgsRasterDataProvider::ProviderCapabilities providerCapabilities() const override;
|
||||
QgsCoordinateReferenceSystem crs() const override;
|
||||
QgsRectangle extent() const override;
|
||||
bool isValid() const override;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user