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,
|
NoProviderCapabilities,
|
||||||
ReadLayerMetadata,
|
ReadLayerMetadata,
|
||||||
WriteLayerMetadata,
|
WriteLayerMetadata,
|
||||||
|
ProviderHintBenefitsFromResampling
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef QFlags<QgsRasterDataProvider::ProviderCapability> ProviderCapabilities;
|
typedef QFlags<QgsRasterDataProvider::ProviderCapability> ProviderCapabilities;
|
||||||
|
|||||||
@ -99,6 +99,7 @@ class CORE_EXPORT QgsRasterDataProvider : public QgsDataProvider, public QgsRast
|
|||||||
NoProviderCapabilities = 0, //!< Provider has no capabilities
|
NoProviderCapabilities = 0, //!< Provider has no capabilities
|
||||||
ReadLayerMetadata = 1 << 1, //!< Provider can read layer metadata from data store. Since QGIS 3.0. See QgsDataProvider::layerMetadata()
|
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()
|
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
|
//! Provider capabilities
|
||||||
|
|||||||
@ -754,26 +754,29 @@ void QgsRasterLayer::setDataProvider( QString const &provider, const QgsDataProv
|
|||||||
QgsHueSaturationFilter *hueSaturationFilter = new QgsHueSaturationFilter();
|
QgsHueSaturationFilter *hueSaturationFilter = new QgsHueSaturationFilter();
|
||||||
mPipe.set( hueSaturationFilter );
|
mPipe.set( hueSaturationFilter );
|
||||||
|
|
||||||
//resampler (must be after renderer)
|
// resampler (must be after renderer)
|
||||||
QgsRasterResampleFilter *resampleFilter = new QgsRasterResampleFilter();
|
QgsRasterResampleFilter *resampleFilter = new QgsRasterResampleFilter();
|
||||||
mPipe.set( resampleFilter );
|
mPipe.set( resampleFilter );
|
||||||
|
|
||||||
QgsSettings settings;
|
if ( mDataProvider->providerCapabilities() & QgsRasterDataProvider::ProviderHintBenefitsFromResampling )
|
||||||
QString resampling = settings.value( QStringLiteral( "/Raster/defaultZoomedInResampling" ), QStringLiteral( "nearest neighbour" ) ).toString();
|
|
||||||
if ( resampling == QStringLiteral( "bilinear" ) )
|
|
||||||
{
|
{
|
||||||
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)
|
// projector (may be anywhere in pipe)
|
||||||
QgsRasterProjector *projector = new QgsRasterProjector;
|
QgsRasterProjector *projector = new QgsRasterProjector;
|
||||||
|
|||||||
@ -1379,6 +1379,11 @@ QString QgsGdalProvider::description() const
|
|||||||
return PROVIDER_DESCRIPTION;
|
return PROVIDER_DESCRIPTION;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QgsRasterDataProvider::ProviderCapabilities QgsGdalProvider::providerCapabilities() const
|
||||||
|
{
|
||||||
|
return QgsRasterDataProvider::ProviderHintBenefitsFromResampling;
|
||||||
|
}
|
||||||
|
|
||||||
// This is used also by global isValidRasterFileName
|
// This is used also by global isValidRasterFileName
|
||||||
QStringList QgsGdalProvider::subLayers( GDALDatasetH dataset )
|
QStringList QgsGdalProvider::subLayers( GDALDatasetH dataset )
|
||||||
{
|
{
|
||||||
|
|||||||
@ -99,6 +99,7 @@ class QgsGdalProvider : public QgsRasterDataProvider, QgsGdalProviderBase
|
|||||||
|
|
||||||
QString name() const override;
|
QString name() const override;
|
||||||
QString description() const override;
|
QString description() const override;
|
||||||
|
QgsRasterDataProvider::ProviderCapabilities providerCapabilities() const override;
|
||||||
QgsCoordinateReferenceSystem crs() const override;
|
QgsCoordinateReferenceSystem crs() const override;
|
||||||
QgsRectangle extent() const override;
|
QgsRectangle extent() const override;
|
||||||
bool isValid() const override;
|
bool isValid() const override;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user