More efficient cloning of vector tile data providers

This commit is contained in:
Nyall Dawson 2023-03-21 09:19:21 +10:00
parent fb8702c039
commit c30bf7eda3
10 changed files with 60 additions and 16 deletions

View File

@ -61,6 +61,16 @@ QgsArcGisVectorTileServiceDataProvider::QgsArcGisVectorTileServiceDataProvider(
mLayerMetadata.addLink( QgsAbstractMetadataBase::Link( tr( "Source" ), QStringLiteral( "WWW:LINK" ), mArcgisLayerConfiguration.value( QStringLiteral( "serviceUri" ) ).toString() ) ); mLayerMetadata.addLink( QgsAbstractMetadataBase::Link( tr( "Source" ), QStringLiteral( "WWW:LINK" ), mArcgisLayerConfiguration.value( QStringLiteral( "serviceUri" ) ).toString() ) );
} }
QgsArcGisVectorTileServiceDataProvider::QgsArcGisVectorTileServiceDataProvider( const QgsArcGisVectorTileServiceDataProvider &other )
: QgsXyzVectorTileDataProvider( other )
{
mSourcePath = other.mSourcePath;
mArcgisLayerConfiguration = other.mArcgisLayerConfiguration;
mArcgisStyleConfiguration = other.mArcgisStyleConfiguration;
mCrs = other.mCrs;
mLayerMetadata = other.mLayerMetadata;
}
QgsVectorTileDataProvider::ProviderCapabilities QgsArcGisVectorTileServiceDataProvider::providerCapabilities() const QgsVectorTileDataProvider::ProviderCapabilities QgsArcGisVectorTileServiceDataProvider::providerCapabilities() const
{ {
return QgsVectorTileDataProvider::ProviderCapability::ReadLayerMetadata; return QgsVectorTileDataProvider::ProviderCapability::ReadLayerMetadata;
@ -84,9 +94,7 @@ QgsVectorTileDataProvider *QgsArcGisVectorTileServiceDataProvider::clone() const
{ {
QGIS_PROTECT_QOBJECT_THREAD_ACCESS QGIS_PROTECT_QOBJECT_THREAD_ACCESS
ProviderOptions options; return new QgsArcGisVectorTileServiceDataProvider( *this );
options.transformContext = transformContext();
return new QgsArcGisVectorTileServiceDataProvider( dataSourceUri(), options, mReadFlags );
} }
QString QgsArcGisVectorTileServiceDataProvider::sourcePath() const QString QgsArcGisVectorTileServiceDataProvider::sourcePath() const

View File

@ -18,7 +18,6 @@
#include "qgis_core.h" #include "qgis_core.h"
#include "qgis_sip.h" #include "qgis_sip.h"
#include "qgsvectortilematrixset.h"
#include "qgsxyzvectortiledataprovider.h" #include "qgsxyzvectortiledataprovider.h"
#include "qgsprovidermetadata.h" #include "qgsprovidermetadata.h"
@ -35,6 +34,8 @@ class CORE_EXPORT QgsArcGisVectorTileServiceDataProvider : public QgsXyzVectorTi
const QgsDataProvider::ProviderOptions &providerOptions, const QgsDataProvider::ProviderOptions &providerOptions,
QgsDataProvider::ReadFlags flags ); QgsDataProvider::ReadFlags flags );
QgsArcGisVectorTileServiceDataProvider( const QgsArcGisVectorTileServiceDataProvider &other );
QgsVectorTileDataProvider::ProviderCapabilities providerCapabilities() const override; QgsVectorTileDataProvider::ProviderCapabilities providerCapabilities() const override;
QString name() const override; QString name() const override;
QString description() const override; QString description() const override;
@ -43,7 +44,7 @@ class CORE_EXPORT QgsArcGisVectorTileServiceDataProvider : public QgsXyzVectorTi
QgsCoordinateReferenceSystem crs() const override; QgsCoordinateReferenceSystem crs() const override;
QgsLayerMetadata layerMetadata() const override; QgsLayerMetadata layerMetadata() const override;
QVariantMap styleDefinition() const override; QVariantMap styleDefinition() const override;
QString styleUrl() const; QString styleUrl() const override;
static QString ARCGIS_VT_SERVICE_DATA_PROVIDER_KEY; static QString ARCGIS_VT_SERVICE_DATA_PROVIDER_KEY;
static QString ARCGIS_VT_SERVICE_DATA_PROVIDER_DESCRIPTION; static QString ARCGIS_VT_SERVICE_DATA_PROVIDER_DESCRIPTION;

View File

@ -81,6 +81,14 @@ QgsMbTilesVectorTileDataProvider::QgsMbTilesVectorTileDataProvider( const QStrin
mIsValid = true; mIsValid = true;
} }
QgsMbTilesVectorTileDataProvider::QgsMbTilesVectorTileDataProvider( const QgsMbTilesVectorTileDataProvider &other )
: QgsVectorTileDataProvider( other )
{
mIsValid = other.mIsValid;
mExtent = other.mExtent;
mMatrixSet = other.mMatrixSet;
}
QString QgsMbTilesVectorTileDataProvider::name() const QString QgsMbTilesVectorTileDataProvider::name() const
{ {
QGIS_PROTECT_QOBJECT_THREAD_ACCESS QGIS_PROTECT_QOBJECT_THREAD_ACCESS
@ -98,10 +106,7 @@ QString QgsMbTilesVectorTileDataProvider::description() const
QgsVectorTileDataProvider *QgsMbTilesVectorTileDataProvider::clone() const QgsVectorTileDataProvider *QgsMbTilesVectorTileDataProvider::clone() const
{ {
QGIS_PROTECT_QOBJECT_THREAD_ACCESS QGIS_PROTECT_QOBJECT_THREAD_ACCESS
return new QgsMbTilesVectorTileDataProvider( *this );
ProviderOptions options;
options.transformContext = transformContext();
return new QgsMbTilesVectorTileDataProvider( dataSourceUri(), options, mReadFlags );
} }
QString QgsMbTilesVectorTileDataProvider::sourcePath() const QString QgsMbTilesVectorTileDataProvider::sourcePath() const

View File

@ -37,6 +37,8 @@ class CORE_EXPORT QgsMbTilesVectorTileDataProvider : public QgsVectorTileDataPro
const QgsDataProvider::ProviderOptions &providerOptions, const QgsDataProvider::ProviderOptions &providerOptions,
QgsDataProvider::ReadFlags flags ); QgsDataProvider::ReadFlags flags );
QgsMbTilesVectorTileDataProvider( const QgsMbTilesVectorTileDataProvider &other );
QString name() const override; QString name() const override;
QString description() const override; QString description() const override;
QgsVectorTileDataProvider *clone() const override; QgsVectorTileDataProvider *clone() const override;

View File

@ -26,6 +26,12 @@ QgsVectorTileDataProvider::QgsVectorTileDataProvider(
: QgsDataProvider( uri, options, flags ) : QgsDataProvider( uri, options, flags )
{} {}
QgsVectorTileDataProvider::QgsVectorTileDataProvider( const QgsVectorTileDataProvider &other )
: QgsDataProvider( other.dataSourceUri( false ), ProviderOptions(), other.mReadFlags )
{
setTransformContext( other.transformContext() );
}
QgsVectorTileDataProvider::ProviderCapabilities QgsVectorTileDataProvider::providerCapabilities() const QgsVectorTileDataProvider::ProviderCapabilities QgsVectorTileDataProvider::providerCapabilities() const
{ {
return QgsVectorTileDataProvider::ProviderCapabilities(); return QgsVectorTileDataProvider::ProviderCapabilities();

View File

@ -61,6 +61,8 @@ class CORE_EXPORT QgsVectorTileDataProvider : public QgsDataProvider
const QgsDataProvider::ProviderOptions &providerOptions, const QgsDataProvider::ProviderOptions &providerOptions,
QgsDataProvider::ReadFlags flags ); QgsDataProvider::ReadFlags flags );
QgsVectorTileDataProvider( const QgsVectorTileDataProvider &other );
/** /**
* Returns flags containing the supported capabilities of the data provider. * Returns flags containing the supported capabilities of the data provider.
* \since QGIS 3.32 * \since QGIS 3.32

View File

@ -67,6 +67,19 @@ QgsVtpkVectorTileDataProvider::QgsVtpkVectorTileDataProvider( const QString &uri
mIsValid = true; mIsValid = true;
} }
QgsVtpkVectorTileDataProvider::QgsVtpkVectorTileDataProvider( const QgsVtpkVectorTileDataProvider &other )
: QgsVectorTileDataProvider( other )
{
mIsValid = other.mIsValid;
mCrs = other.mCrs;;
mExtent = other.mExtent;
mMatrixSet = other.mMatrixSet;
mLayerMetadata = other.mLayerMetadata;
mStyleDefinition = other.mStyleDefinition;
mSpriteDefinition = other.mSpriteDefinition;
mSpriteImage = other.mSpriteImage;
}
QgsVectorTileDataProvider::ProviderCapabilities QgsVtpkVectorTileDataProvider::providerCapabilities() const QgsVectorTileDataProvider::ProviderCapabilities QgsVtpkVectorTileDataProvider::providerCapabilities() const
{ {
return QgsVectorTileDataProvider::ProviderCapability::ReadLayerMetadata; return QgsVectorTileDataProvider::ProviderCapability::ReadLayerMetadata;
@ -89,10 +102,7 @@ QString QgsVtpkVectorTileDataProvider::description() const
QgsVectorTileDataProvider *QgsVtpkVectorTileDataProvider::clone() const QgsVectorTileDataProvider *QgsVtpkVectorTileDataProvider::clone() const
{ {
QGIS_PROTECT_QOBJECT_THREAD_ACCESS QGIS_PROTECT_QOBJECT_THREAD_ACCESS
return new QgsVtpkVectorTileDataProvider( *this );
ProviderOptions options;
options.transformContext = transformContext();
return new QgsVtpkVectorTileDataProvider( dataSourceUri(), options, mReadFlags );
} }
QString QgsVtpkVectorTileDataProvider::sourcePath() const QString QgsVtpkVectorTileDataProvider::sourcePath() const

View File

@ -38,6 +38,7 @@ class CORE_EXPORT QgsVtpkVectorTileDataProvider : public QgsVectorTileDataProvid
QgsVtpkVectorTileDataProvider( const QString &uri, QgsVtpkVectorTileDataProvider( const QString &uri,
const QgsDataProvider::ProviderOptions &providerOptions, const QgsDataProvider::ProviderOptions &providerOptions,
QgsDataProvider::ReadFlags flags ); QgsDataProvider::ReadFlags flags );
QgsVtpkVectorTileDataProvider( const QgsVtpkVectorTileDataProvider &other );
QgsVectorTileDataProvider::ProviderCapabilities providerCapabilities() const override; QgsVectorTileDataProvider::ProviderCapabilities providerCapabilities() const override;
QString name() const override; QString name() const override;

View File

@ -63,6 +63,16 @@ QgsXyzVectorTileDataProvider::QgsXyzVectorTileDataProvider( const QString &uri,
mIsValid = true; mIsValid = true;
} }
QgsXyzVectorTileDataProvider::QgsXyzVectorTileDataProvider( const QgsXyzVectorTileDataProvider &other )
: QgsVectorTileDataProvider( other )
{
mAuthCfg = other.mAuthCfg;
mHeaders = other.mHeaders;
mIsValid = other.mIsValid;
mExtent = other.mExtent;
mMatrixSet = other.mMatrixSet;
}
QString QgsXyzVectorTileDataProvider::name() const QString QgsXyzVectorTileDataProvider::name() const
{ {
QGIS_PROTECT_QOBJECT_THREAD_ACCESS QGIS_PROTECT_QOBJECT_THREAD_ACCESS
@ -81,9 +91,7 @@ QgsVectorTileDataProvider *QgsXyzVectorTileDataProvider::clone() const
{ {
QGIS_PROTECT_QOBJECT_THREAD_ACCESS QGIS_PROTECT_QOBJECT_THREAD_ACCESS
ProviderOptions options; return new QgsXyzVectorTileDataProvider( *this );
options.transformContext = transformContext();
return new QgsXyzVectorTileDataProvider( dataSourceUri(), options, mReadFlags );
} }
QString QgsXyzVectorTileDataProvider::sourcePath() const QString QgsXyzVectorTileDataProvider::sourcePath() const

View File

@ -33,6 +33,7 @@ class CORE_EXPORT QgsXyzVectorTileDataProvider : public QgsVectorTileDataProvide
QgsXyzVectorTileDataProvider( const QString &uri, QgsXyzVectorTileDataProvider( const QString &uri,
const QgsDataProvider::ProviderOptions &providerOptions, const QgsDataProvider::ProviderOptions &providerOptions,
QgsDataProvider::ReadFlags flags ); QgsDataProvider::ReadFlags flags );
QgsXyzVectorTileDataProvider( const QgsXyzVectorTileDataProvider &other );
QString name() const override; QString name() const override;
QString description() const override; QString description() const override;