mirror of
https://github.com/qgis/QGIS.git
synced 2025-10-06 00:07:29 -04:00
Move vector tile style handling to data provider subclasses
This commit is contained in:
parent
55daeff0b5
commit
fb8702c039
@ -105,9 +105,27 @@ QgsCoordinateReferenceSystem QgsArcGisVectorTileServiceDataProvider::crs() const
|
||||
|
||||
QgsLayerMetadata QgsArcGisVectorTileServiceDataProvider::layerMetadata() const
|
||||
{
|
||||
QGIS_PROTECT_QOBJECT_THREAD_ACCESS
|
||||
|
||||
return mLayerMetadata;
|
||||
}
|
||||
|
||||
QVariantMap QgsArcGisVectorTileServiceDataProvider::styleDefinition() const
|
||||
{
|
||||
QGIS_PROTECT_QOBJECT_THREAD_ACCESS
|
||||
|
||||
return mArcgisStyleConfiguration;
|
||||
}
|
||||
|
||||
QString QgsArcGisVectorTileServiceDataProvider::styleUrl() const
|
||||
{
|
||||
QGIS_PROTECT_QOBJECT_THREAD_ACCESS
|
||||
|
||||
// for ArcMap VectorTileServices we default to the defaultStyles URL from the layer configuration
|
||||
return mArcgisLayerConfiguration.value( QStringLiteral( "serviceUri" ) ).toString()
|
||||
+ '/' + mArcgisLayerConfiguration.value( QStringLiteral( "defaultStyles" ) ).toString();
|
||||
}
|
||||
|
||||
bool QgsArcGisVectorTileServiceDataProvider::setupArcgisVectorTileServiceConnection()
|
||||
{
|
||||
QGIS_PROTECT_QOBJECT_THREAD_ACCESS
|
||||
|
@ -42,6 +42,8 @@ class CORE_EXPORT QgsArcGisVectorTileServiceDataProvider : public QgsXyzVectorTi
|
||||
QString sourcePath() const override;
|
||||
QgsCoordinateReferenceSystem crs() const override;
|
||||
QgsLayerMetadata layerMetadata() const override;
|
||||
QVariantMap styleDefinition() const override;
|
||||
QString styleUrl() const;
|
||||
|
||||
static QString ARCGIS_VT_SERVICE_DATA_PROVIDER_KEY;
|
||||
static QString ARCGIS_VT_SERVICE_DATA_PROVIDER_DESCRIPTION;
|
||||
|
@ -17,6 +17,7 @@
|
||||
#include "qgsthreadingutils.h"
|
||||
|
||||
#include <QNetworkRequest>
|
||||
#include <QImage>
|
||||
|
||||
QgsVectorTileDataProvider::QgsVectorTileDataProvider(
|
||||
const QString &uri,
|
||||
@ -61,5 +62,33 @@ QNetworkRequest QgsVectorTileDataProvider::tileRequest( const QgsTileMatrix &, c
|
||||
return QNetworkRequest();
|
||||
}
|
||||
|
||||
QVariantMap QgsVectorTileDataProvider::styleDefinition() const
|
||||
{
|
||||
QGIS_PROTECT_QOBJECT_THREAD_ACCESS
|
||||
|
||||
return QVariantMap();
|
||||
}
|
||||
|
||||
QString QgsVectorTileDataProvider::styleUrl() const
|
||||
{
|
||||
QGIS_PROTECT_QOBJECT_THREAD_ACCESS
|
||||
|
||||
return QString();
|
||||
}
|
||||
|
||||
QVariantMap QgsVectorTileDataProvider::spriteDefinition() const
|
||||
{
|
||||
QGIS_PROTECT_QOBJECT_THREAD_ACCESS
|
||||
|
||||
return QVariantMap();
|
||||
}
|
||||
|
||||
QImage QgsVectorTileDataProvider::spriteImage() const
|
||||
{
|
||||
QGIS_PROTECT_QOBJECT_THREAD_ACCESS
|
||||
|
||||
return QImage();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
@ -108,6 +108,37 @@ class CORE_EXPORT QgsVectorTileDataProvider : public QgsDataProvider
|
||||
* The default implementation returns an invalid request.
|
||||
*/
|
||||
virtual QNetworkRequest tileRequest( const QgsTileMatrix &tileMatrix, const QgsTileXYZ &id, Qgis::RendererUsage usage ) const;
|
||||
|
||||
/**
|
||||
* Returns the style definition for the provider, if available.
|
||||
*
|
||||
* \see styleUrl()
|
||||
* \see spriteDefinition()
|
||||
*/
|
||||
virtual QVariantMap styleDefinition() const;
|
||||
|
||||
/**
|
||||
* Returns the URL for the provider style, if available.
|
||||
*
|
||||
* If styleDefinition() is empty, then the layer style may be available
|
||||
* from this URL.
|
||||
*/
|
||||
virtual QString styleUrl() const;
|
||||
|
||||
/**
|
||||
* Returns the sprite definition for the provider, if available.
|
||||
*
|
||||
* \see spriteImage()
|
||||
* \see styleDefinition()
|
||||
*/
|
||||
virtual QVariantMap spriteDefinition() const;
|
||||
|
||||
/**
|
||||
* Returns the sprite image for the provider, if available.
|
||||
*
|
||||
* \see spriteDefinition()
|
||||
*/
|
||||
virtual QImage spriteImage() const;
|
||||
};
|
||||
|
||||
|
||||
|
@ -17,7 +17,6 @@
|
||||
|
||||
#include "qgslogger.h"
|
||||
#include "qgsvectortilelayerrenderer.h"
|
||||
#include "qgsvtpktiles.h"
|
||||
#include "qgsvectortilebasiclabeling.h"
|
||||
#include "qgsvectortilebasicrenderer.h"
|
||||
#include "qgsvectortilelabeling.h"
|
||||
@ -36,7 +35,6 @@
|
||||
#include "qgsthreadingutils.h"
|
||||
#include "qgsproviderregistry.h"
|
||||
#include "qgsvectortiledataprovider.h"
|
||||
#include "qgsarcgisvectortileservicedataprovider.h"
|
||||
|
||||
#include <QUrl>
|
||||
#include <QUrlQuery>
|
||||
@ -379,6 +377,9 @@ bool QgsVectorTileLayer::loadDefaultStyleAndSubLayers( QString &error, QStringLi
|
||||
bool QgsVectorTileLayer::loadDefaultStyleAndSubLayersPrivate( QString &error, QStringList &warnings, QList<QgsMapLayer *> *subLayers )
|
||||
{
|
||||
QGIS_PROTECT_QOBJECT_THREAD_ACCESS
|
||||
QgsVectorTileDataProvider *vtProvider = qgis::down_cast< QgsVectorTileDataProvider *> ( mDataProvider.get() );
|
||||
if ( !vtProvider )
|
||||
return false;
|
||||
|
||||
QgsDataSourceUri dsUri;
|
||||
dsUri.setEncodedUri( mDataSource );
|
||||
@ -390,38 +391,22 @@ bool QgsVectorTileLayer::loadDefaultStyleAndSubLayersPrivate( QString &error, QS
|
||||
{
|
||||
styleUrl = dsUri.param( QStringLiteral( "styleUrl" ) );
|
||||
}
|
||||
else if ( mSourceType == QLatin1String( "xyz" ) && dsUri.param( QStringLiteral( "serviceType" ) ) == QLatin1String( "arcgis" ) )
|
||||
else
|
||||
{
|
||||
// for ArcMap VectorTileServices we default to the defaultStyles URL from the layer configuration
|
||||
styleUrl = mArcgisLayerConfiguration.value( QStringLiteral( "serviceUri" ) ).toString()
|
||||
+ '/' + mArcgisLayerConfiguration.value( QStringLiteral( "defaultStyles" ) ).toString();
|
||||
styleUrl = vtProvider->styleUrl();
|
||||
}
|
||||
|
||||
if ( mSourceType == QLatin1String( "vtpk" ) )
|
||||
styleDefinition = vtProvider->styleDefinition();
|
||||
const QVariantMap spriteDefinition = vtProvider->spriteDefinition();
|
||||
if ( !spriteDefinition.isEmpty() )
|
||||
{
|
||||
QgsVtpkTiles reader( sourcePath() );
|
||||
if ( !reader.open() )
|
||||
{
|
||||
QgsDebugMsg( QStringLiteral( "failed to open VTPK file: " ) + sourcePath() );
|
||||
return false;
|
||||
}
|
||||
|
||||
styleDefinition = reader.styleDefinition();
|
||||
|
||||
const QVariantMap spriteDefinition = reader.spriteDefinition();
|
||||
if ( !spriteDefinition.isEmpty() )
|
||||
{
|
||||
const QImage spriteImage = reader.spriteImage();
|
||||
context.setSprites( spriteImage, spriteDefinition );
|
||||
}
|
||||
const QImage spriteImage = vtProvider->spriteImage();
|
||||
context.setSprites( spriteImage, spriteDefinition );
|
||||
}
|
||||
else if ( !mArcgisStyleConfiguration.isEmpty() || !styleUrl.isEmpty() )
|
||||
|
||||
if ( !styleDefinition.isEmpty() || !styleUrl.isEmpty() )
|
||||
{
|
||||
if ( !mArcgisStyleConfiguration.isEmpty() )
|
||||
{
|
||||
styleDefinition = mArcgisStyleConfiguration;
|
||||
}
|
||||
else
|
||||
if ( styleDefinition.isEmpty() )
|
||||
{
|
||||
QNetworkRequest request = QNetworkRequest( QUrl( styleUrl ) );
|
||||
|
||||
|
@ -295,9 +295,6 @@ class CORE_EXPORT QgsVectorTileLayer : public QgsMapLayer
|
||||
//! Whether we draw borders of tiles
|
||||
bool mTileBorderRendering = false;
|
||||
|
||||
QVariantMap mArcgisLayerConfiguration;
|
||||
QVariantMap mArcgisStyleConfiguration;
|
||||
|
||||
QgsCoordinateTransformContext mTransformContext;
|
||||
|
||||
std::unique_ptr< QgsDataProvider > mDataProvider;
|
||||
|
@ -57,6 +57,12 @@ QgsVtpkVectorTileDataProvider::QgsVtpkVectorTileDataProvider( const QString &uri
|
||||
mCrs = mMatrixSet.crs();
|
||||
mExtent = reader.extent( transformContext() );
|
||||
mLayerMetadata = reader.layerMetadata();
|
||||
mStyleDefinition = reader.styleDefinition();
|
||||
mSpriteDefinition = reader.spriteDefinition();
|
||||
if ( !mSpriteDefinition.isEmpty() )
|
||||
{
|
||||
mSpriteImage = reader.spriteImage();
|
||||
}
|
||||
|
||||
mIsValid = true;
|
||||
}
|
||||
@ -131,6 +137,27 @@ const QgsVectorTileMatrixSet &QgsVtpkVectorTileDataProvider::tileMatrixSet() con
|
||||
return mMatrixSet;
|
||||
}
|
||||
|
||||
QVariantMap QgsVtpkVectorTileDataProvider::styleDefinition() const
|
||||
{
|
||||
QGIS_PROTECT_QOBJECT_THREAD_ACCESS
|
||||
|
||||
return mStyleDefinition;
|
||||
}
|
||||
|
||||
QVariantMap QgsVtpkVectorTileDataProvider::spriteDefinition() const
|
||||
{
|
||||
QGIS_PROTECT_QOBJECT_THREAD_ACCESS
|
||||
|
||||
return mSpriteDefinition;
|
||||
}
|
||||
|
||||
QImage QgsVtpkVectorTileDataProvider::spriteImage() const
|
||||
{
|
||||
QGIS_PROTECT_QOBJECT_THREAD_ACCESS
|
||||
|
||||
return mSpriteImage;
|
||||
}
|
||||
|
||||
QByteArray QgsVtpkVectorTileDataProvider::readTile( const QgsTileMatrix &, const QgsTileXYZ &id, QgsFeedback *feedback ) const
|
||||
{
|
||||
QGIS_PROTECT_QOBJECT_THREAD_ACCESS
|
||||
|
@ -22,6 +22,8 @@
|
||||
#include "qgsprovidermetadata.h"
|
||||
#include "qgsvectortilematrixset.h"
|
||||
|
||||
#include <QImage>
|
||||
|
||||
#define SIP_NO_FILE
|
||||
|
||||
///@cond PRIVATE
|
||||
@ -47,6 +49,9 @@ class CORE_EXPORT QgsVtpkVectorTileDataProvider : public QgsVectorTileDataProvid
|
||||
QgsRectangle extent() const override;
|
||||
QgsLayerMetadata layerMetadata() const override;
|
||||
const QgsVectorTileMatrixSet &tileMatrixSet() const override;
|
||||
QVariantMap styleDefinition() const override;
|
||||
QVariantMap spriteDefinition() const override;
|
||||
QImage spriteImage() const override;
|
||||
QByteArray readTile( const QgsTileMatrix &tileMatrix, const QgsTileXYZ &id, QgsFeedback *feedback = nullptr ) const override;
|
||||
QList<QgsVectorTileRawData> readTiles( const QgsTileMatrix &, const QVector<QgsTileXYZ> &tiles, QgsFeedback *feedback = nullptr ) const override;
|
||||
|
||||
@ -62,6 +67,9 @@ class CORE_EXPORT QgsVtpkVectorTileDataProvider : public QgsVectorTileDataProvid
|
||||
QgsRectangle mExtent;
|
||||
QgsVectorTileMatrixSet mMatrixSet;
|
||||
QgsLayerMetadata mLayerMetadata;
|
||||
QVariantMap mStyleDefinition;
|
||||
QVariantMap mSpriteDefinition;
|
||||
QImage mSpriteImage;
|
||||
|
||||
};
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user