Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
[mapserver] Safer and faster rendering of ArcGIS MapServer layers
Avoid redundant network requests when cloning data provider
  • Loading branch information
nyalldawson committed May 30, 2019
1 parent 75c720a commit 8e51364
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 1 deletion.
26 changes: 25 additions & 1 deletion src/providers/arcgisrest/qgsamsprovider.cpp
Expand Up @@ -164,6 +164,29 @@ QgsAmsProvider::QgsAmsProvider( const QString &uri, const ProviderOptions &optio
mValid = true;
}

QgsAmsProvider::QgsAmsProvider( const QgsAmsProvider &other, const QgsDataProvider::ProviderOptions &providerOptions )
: QgsRasterDataProvider( other.dataSourceUri(), providerOptions )
, mValid( other.mValid )
// intentionally omitted:
// - mLegendFetcher
, mServiceInfo( other.mServiceInfo )
, mLayerInfo( other.mLayerInfo )
, mCrs( other.mCrs )
, mExtent( other.mExtent )
, mSubLayers( other.mSubLayers )
, mSubLayerVisibilities( other.mSubLayerVisibilities )
// intentionally omitted:
// - mErrorTitle
// - mError
// - mCachedImage
// - mCachedImageExtent
{
mLegendFetcher = new QgsAmsLegendFetcher( this );

// is this needed?
mTimestamp = QDateTime::currentDateTime();
}

QStringList QgsAmsProvider::subLayerStyles() const
{
QStringList styles;
Expand Down Expand Up @@ -221,7 +244,8 @@ void QgsAmsProvider::reloadData()
QgsRasterInterface *QgsAmsProvider::clone() const
{
QgsDataProvider::ProviderOptions options;
QgsAmsProvider *provider = new QgsAmsProvider( dataSourceUri(), options );
options.transformContext = transformContext();
QgsAmsProvider *provider = new QgsAmsProvider( *this, options );
provider->copyBaseSettings( *this );
return provider;
}
Expand Down
2 changes: 2 additions & 0 deletions src/providers/arcgisrest/qgsamsprovider.h
Expand Up @@ -56,6 +56,8 @@ class QgsAmsProvider : public QgsRasterDataProvider
public:
QgsAmsProvider( const QString &uri, const QgsDataProvider::ProviderOptions &providerOptions );

explicit QgsAmsProvider( const QgsAmsProvider &other, const QgsDataProvider::ProviderOptions &providerOptions );

/* Inherited from QgsDataProvider */
bool isValid() const override { return mValid; }
QString name() const override { return QStringLiteral( "mapserver" ); }
Expand Down

0 comments on commit 8e51364

Please sign in to comment.