Skip to content

Commit c30bf7e

Browse files
committedMar 23, 2023
More efficient cloning of vector tile data providers
1 parent fb8702c commit c30bf7e

10 files changed

+60
-16
lines changed
 

‎src/core/vectortile/qgsarcgisvectortileservicedataprovider.cpp

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,16 @@ QgsArcGisVectorTileServiceDataProvider::QgsArcGisVectorTileServiceDataProvider(
6161
mLayerMetadata.addLink( QgsAbstractMetadataBase::Link( tr( "Source" ), QStringLiteral( "WWW:LINK" ), mArcgisLayerConfiguration.value( QStringLiteral( "serviceUri" ) ).toString() ) );
6262
}
6363

64+
QgsArcGisVectorTileServiceDataProvider::QgsArcGisVectorTileServiceDataProvider( const QgsArcGisVectorTileServiceDataProvider &other )
65+
: QgsXyzVectorTileDataProvider( other )
66+
{
67+
mSourcePath = other.mSourcePath;
68+
mArcgisLayerConfiguration = other.mArcgisLayerConfiguration;
69+
mArcgisStyleConfiguration = other.mArcgisStyleConfiguration;
70+
mCrs = other.mCrs;
71+
mLayerMetadata = other.mLayerMetadata;
72+
}
73+
6474
QgsVectorTileDataProvider::ProviderCapabilities QgsArcGisVectorTileServiceDataProvider::providerCapabilities() const
6575
{
6676
return QgsVectorTileDataProvider::ProviderCapability::ReadLayerMetadata;
@@ -84,9 +94,7 @@ QgsVectorTileDataProvider *QgsArcGisVectorTileServiceDataProvider::clone() const
8494
{
8595
QGIS_PROTECT_QOBJECT_THREAD_ACCESS
8696

87-
ProviderOptions options;
88-
options.transformContext = transformContext();
89-
return new QgsArcGisVectorTileServiceDataProvider( dataSourceUri(), options, mReadFlags );
97+
return new QgsArcGisVectorTileServiceDataProvider( *this );
9098
}
9199

92100
QString QgsArcGisVectorTileServiceDataProvider::sourcePath() const

‎src/core/vectortile/qgsarcgisvectortileservicedataprovider.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818

1919
#include "qgis_core.h"
2020
#include "qgis_sip.h"
21-
#include "qgsvectortilematrixset.h"
2221
#include "qgsxyzvectortiledataprovider.h"
2322
#include "qgsprovidermetadata.h"
2423

@@ -35,6 +34,8 @@ class CORE_EXPORT QgsArcGisVectorTileServiceDataProvider : public QgsXyzVectorTi
3534
const QgsDataProvider::ProviderOptions &providerOptions,
3635
QgsDataProvider::ReadFlags flags );
3736

37+
QgsArcGisVectorTileServiceDataProvider( const QgsArcGisVectorTileServiceDataProvider &other );
38+
3839
QgsVectorTileDataProvider::ProviderCapabilities providerCapabilities() const override;
3940
QString name() const override;
4041
QString description() const override;
@@ -43,7 +44,7 @@ class CORE_EXPORT QgsArcGisVectorTileServiceDataProvider : public QgsXyzVectorTi
4344
QgsCoordinateReferenceSystem crs() const override;
4445
QgsLayerMetadata layerMetadata() const override;
4546
QVariantMap styleDefinition() const override;
46-
QString styleUrl() const;
47+
QString styleUrl() const override;
4748

4849
static QString ARCGIS_VT_SERVICE_DATA_PROVIDER_KEY;
4950
static QString ARCGIS_VT_SERVICE_DATA_PROVIDER_DESCRIPTION;

‎src/core/vectortile/qgsmbtilesvectortiledataprovider.cpp

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,14 @@ QgsMbTilesVectorTileDataProvider::QgsMbTilesVectorTileDataProvider( const QStrin
8181
mIsValid = true;
8282
}
8383

84+
QgsMbTilesVectorTileDataProvider::QgsMbTilesVectorTileDataProvider( const QgsMbTilesVectorTileDataProvider &other )
85+
: QgsVectorTileDataProvider( other )
86+
{
87+
mIsValid = other.mIsValid;
88+
mExtent = other.mExtent;
89+
mMatrixSet = other.mMatrixSet;
90+
}
91+
8492
QString QgsMbTilesVectorTileDataProvider::name() const
8593
{
8694
QGIS_PROTECT_QOBJECT_THREAD_ACCESS
@@ -98,10 +106,7 @@ QString QgsMbTilesVectorTileDataProvider::description() const
98106
QgsVectorTileDataProvider *QgsMbTilesVectorTileDataProvider::clone() const
99107
{
100108
QGIS_PROTECT_QOBJECT_THREAD_ACCESS
101-
102-
ProviderOptions options;
103-
options.transformContext = transformContext();
104-
return new QgsMbTilesVectorTileDataProvider( dataSourceUri(), options, mReadFlags );
109+
return new QgsMbTilesVectorTileDataProvider( *this );
105110
}
106111

107112
QString QgsMbTilesVectorTileDataProvider::sourcePath() const

‎src/core/vectortile/qgsmbtilesvectortiledataprovider.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ class CORE_EXPORT QgsMbTilesVectorTileDataProvider : public QgsVectorTileDataPro
3737
const QgsDataProvider::ProviderOptions &providerOptions,
3838
QgsDataProvider::ReadFlags flags );
3939

40+
QgsMbTilesVectorTileDataProvider( const QgsMbTilesVectorTileDataProvider &other );
41+
4042
QString name() const override;
4143
QString description() const override;
4244
QgsVectorTileDataProvider *clone() const override;

‎src/core/vectortile/qgsvectortiledataprovider.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,12 @@ QgsVectorTileDataProvider::QgsVectorTileDataProvider(
2626
: QgsDataProvider( uri, options, flags )
2727
{}
2828

29+
QgsVectorTileDataProvider::QgsVectorTileDataProvider( const QgsVectorTileDataProvider &other )
30+
: QgsDataProvider( other.dataSourceUri( false ), ProviderOptions(), other.mReadFlags )
31+
{
32+
setTransformContext( other.transformContext() );
33+
}
34+
2935
QgsVectorTileDataProvider::ProviderCapabilities QgsVectorTileDataProvider::providerCapabilities() const
3036
{
3137
return QgsVectorTileDataProvider::ProviderCapabilities();

‎src/core/vectortile/qgsvectortiledataprovider.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@ class CORE_EXPORT QgsVectorTileDataProvider : public QgsDataProvider
6161
const QgsDataProvider::ProviderOptions &providerOptions,
6262
QgsDataProvider::ReadFlags flags );
6363

64+
QgsVectorTileDataProvider( const QgsVectorTileDataProvider &other );
65+
6466
/**
6567
* Returns flags containing the supported capabilities of the data provider.
6668
* \since QGIS 3.32

‎src/core/vectortile/qgsvtpkvectortiledataprovider.cpp

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,19 @@ QgsVtpkVectorTileDataProvider::QgsVtpkVectorTileDataProvider( const QString &uri
6767
mIsValid = true;
6868
}
6969

70+
QgsVtpkVectorTileDataProvider::QgsVtpkVectorTileDataProvider( const QgsVtpkVectorTileDataProvider &other )
71+
: QgsVectorTileDataProvider( other )
72+
{
73+
mIsValid = other.mIsValid;
74+
mCrs = other.mCrs;;
75+
mExtent = other.mExtent;
76+
mMatrixSet = other.mMatrixSet;
77+
mLayerMetadata = other.mLayerMetadata;
78+
mStyleDefinition = other.mStyleDefinition;
79+
mSpriteDefinition = other.mSpriteDefinition;
80+
mSpriteImage = other.mSpriteImage;
81+
}
82+
7083
QgsVectorTileDataProvider::ProviderCapabilities QgsVtpkVectorTileDataProvider::providerCapabilities() const
7184
{
7285
return QgsVectorTileDataProvider::ProviderCapability::ReadLayerMetadata;
@@ -89,10 +102,7 @@ QString QgsVtpkVectorTileDataProvider::description() const
89102
QgsVectorTileDataProvider *QgsVtpkVectorTileDataProvider::clone() const
90103
{
91104
QGIS_PROTECT_QOBJECT_THREAD_ACCESS
92-
93-
ProviderOptions options;
94-
options.transformContext = transformContext();
95-
return new QgsVtpkVectorTileDataProvider( dataSourceUri(), options, mReadFlags );
105+
return new QgsVtpkVectorTileDataProvider( *this );
96106
}
97107

98108
QString QgsVtpkVectorTileDataProvider::sourcePath() const

‎src/core/vectortile/qgsvtpkvectortiledataprovider.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ class CORE_EXPORT QgsVtpkVectorTileDataProvider : public QgsVectorTileDataProvid
3838
QgsVtpkVectorTileDataProvider( const QString &uri,
3939
const QgsDataProvider::ProviderOptions &providerOptions,
4040
QgsDataProvider::ReadFlags flags );
41+
QgsVtpkVectorTileDataProvider( const QgsVtpkVectorTileDataProvider &other );
4142

4243
QgsVectorTileDataProvider::ProviderCapabilities providerCapabilities() const override;
4344
QString name() const override;

‎src/core/vectortile/qgsxyzvectortiledataprovider.cpp

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,16 @@ QgsXyzVectorTileDataProvider::QgsXyzVectorTileDataProvider( const QString &uri,
6363
mIsValid = true;
6464
}
6565

66+
QgsXyzVectorTileDataProvider::QgsXyzVectorTileDataProvider( const QgsXyzVectorTileDataProvider &other )
67+
: QgsVectorTileDataProvider( other )
68+
{
69+
mAuthCfg = other.mAuthCfg;
70+
mHeaders = other.mHeaders;
71+
mIsValid = other.mIsValid;
72+
mExtent = other.mExtent;
73+
mMatrixSet = other.mMatrixSet;
74+
}
75+
6676
QString QgsXyzVectorTileDataProvider::name() const
6777
{
6878
QGIS_PROTECT_QOBJECT_THREAD_ACCESS
@@ -81,9 +91,7 @@ QgsVectorTileDataProvider *QgsXyzVectorTileDataProvider::clone() const
8191
{
8292
QGIS_PROTECT_QOBJECT_THREAD_ACCESS
8393

84-
ProviderOptions options;
85-
options.transformContext = transformContext();
86-
return new QgsXyzVectorTileDataProvider( dataSourceUri(), options, mReadFlags );
94+
return new QgsXyzVectorTileDataProvider( *this );
8795
}
8896

8997
QString QgsXyzVectorTileDataProvider::sourcePath() const

‎src/core/vectortile/qgsxyzvectortiledataprovider.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ class CORE_EXPORT QgsXyzVectorTileDataProvider : public QgsVectorTileDataProvide
3333
QgsXyzVectorTileDataProvider( const QString &uri,
3434
const QgsDataProvider::ProviderOptions &providerOptions,
3535
QgsDataProvider::ReadFlags flags );
36+
QgsXyzVectorTileDataProvider( const QgsXyzVectorTileDataProvider &other );
3637

3738
QString name() const override;
3839
QString description() const override;

0 commit comments

Comments
 (0)
Please sign in to comment.