mirror of
https://github.com/qgis/QGIS.git
synced 2025-10-15 00:02:52 -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
|
QgsLayerMetadata QgsArcGisVectorTileServiceDataProvider::layerMetadata() const
|
||||||
{
|
{
|
||||||
|
QGIS_PROTECT_QOBJECT_THREAD_ACCESS
|
||||||
|
|
||||||
return mLayerMetadata;
|
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()
|
bool QgsArcGisVectorTileServiceDataProvider::setupArcgisVectorTileServiceConnection()
|
||||||
{
|
{
|
||||||
QGIS_PROTECT_QOBJECT_THREAD_ACCESS
|
QGIS_PROTECT_QOBJECT_THREAD_ACCESS
|
||||||
|
@ -42,6 +42,8 @@ class CORE_EXPORT QgsArcGisVectorTileServiceDataProvider : public QgsXyzVectorTi
|
|||||||
QString sourcePath() const override;
|
QString sourcePath() const override;
|
||||||
QgsCoordinateReferenceSystem crs() const override;
|
QgsCoordinateReferenceSystem crs() const override;
|
||||||
QgsLayerMetadata layerMetadata() 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_KEY;
|
||||||
static QString ARCGIS_VT_SERVICE_DATA_PROVIDER_DESCRIPTION;
|
static QString ARCGIS_VT_SERVICE_DATA_PROVIDER_DESCRIPTION;
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
#include "qgsthreadingutils.h"
|
#include "qgsthreadingutils.h"
|
||||||
|
|
||||||
#include <QNetworkRequest>
|
#include <QNetworkRequest>
|
||||||
|
#include <QImage>
|
||||||
|
|
||||||
QgsVectorTileDataProvider::QgsVectorTileDataProvider(
|
QgsVectorTileDataProvider::QgsVectorTileDataProvider(
|
||||||
const QString &uri,
|
const QString &uri,
|
||||||
@ -61,5 +62,33 @@ QNetworkRequest QgsVectorTileDataProvider::tileRequest( const QgsTileMatrix &, c
|
|||||||
return QNetworkRequest();
|
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.
|
* The default implementation returns an invalid request.
|
||||||
*/
|
*/
|
||||||
virtual QNetworkRequest tileRequest( const QgsTileMatrix &tileMatrix, const QgsTileXYZ &id, Qgis::RendererUsage usage ) const;
|
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 "qgslogger.h"
|
||||||
#include "qgsvectortilelayerrenderer.h"
|
#include "qgsvectortilelayerrenderer.h"
|
||||||
#include "qgsvtpktiles.h"
|
|
||||||
#include "qgsvectortilebasiclabeling.h"
|
#include "qgsvectortilebasiclabeling.h"
|
||||||
#include "qgsvectortilebasicrenderer.h"
|
#include "qgsvectortilebasicrenderer.h"
|
||||||
#include "qgsvectortilelabeling.h"
|
#include "qgsvectortilelabeling.h"
|
||||||
@ -36,7 +35,6 @@
|
|||||||
#include "qgsthreadingutils.h"
|
#include "qgsthreadingutils.h"
|
||||||
#include "qgsproviderregistry.h"
|
#include "qgsproviderregistry.h"
|
||||||
#include "qgsvectortiledataprovider.h"
|
#include "qgsvectortiledataprovider.h"
|
||||||
#include "qgsarcgisvectortileservicedataprovider.h"
|
|
||||||
|
|
||||||
#include <QUrl>
|
#include <QUrl>
|
||||||
#include <QUrlQuery>
|
#include <QUrlQuery>
|
||||||
@ -379,6 +377,9 @@ bool QgsVectorTileLayer::loadDefaultStyleAndSubLayers( QString &error, QStringLi
|
|||||||
bool QgsVectorTileLayer::loadDefaultStyleAndSubLayersPrivate( QString &error, QStringList &warnings, QList<QgsMapLayer *> *subLayers )
|
bool QgsVectorTileLayer::loadDefaultStyleAndSubLayersPrivate( QString &error, QStringList &warnings, QList<QgsMapLayer *> *subLayers )
|
||||||
{
|
{
|
||||||
QGIS_PROTECT_QOBJECT_THREAD_ACCESS
|
QGIS_PROTECT_QOBJECT_THREAD_ACCESS
|
||||||
|
QgsVectorTileDataProvider *vtProvider = qgis::down_cast< QgsVectorTileDataProvider *> ( mDataProvider.get() );
|
||||||
|
if ( !vtProvider )
|
||||||
|
return false;
|
||||||
|
|
||||||
QgsDataSourceUri dsUri;
|
QgsDataSourceUri dsUri;
|
||||||
dsUri.setEncodedUri( mDataSource );
|
dsUri.setEncodedUri( mDataSource );
|
||||||
@ -390,38 +391,22 @@ bool QgsVectorTileLayer::loadDefaultStyleAndSubLayersPrivate( QString &error, QS
|
|||||||
{
|
{
|
||||||
styleUrl = dsUri.param( QStringLiteral( "styleUrl" ) );
|
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 = vtProvider->styleUrl();
|
||||||
styleUrl = mArcgisLayerConfiguration.value( QStringLiteral( "serviceUri" ) ).toString()
|
|
||||||
+ '/' + mArcgisLayerConfiguration.value( QStringLiteral( "defaultStyles" ) ).toString();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( mSourceType == QLatin1String( "vtpk" ) )
|
styleDefinition = vtProvider->styleDefinition();
|
||||||
|
const QVariantMap spriteDefinition = vtProvider->spriteDefinition();
|
||||||
|
if ( !spriteDefinition.isEmpty() )
|
||||||
{
|
{
|
||||||
QgsVtpkTiles reader( sourcePath() );
|
const QImage spriteImage = vtProvider->spriteImage();
|
||||||
if ( !reader.open() )
|
context.setSprites( spriteImage, spriteDefinition );
|
||||||
{
|
|
||||||
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 );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else if ( !mArcgisStyleConfiguration.isEmpty() || !styleUrl.isEmpty() )
|
|
||||||
|
if ( !styleDefinition.isEmpty() || !styleUrl.isEmpty() )
|
||||||
{
|
{
|
||||||
if ( !mArcgisStyleConfiguration.isEmpty() )
|
if ( styleDefinition.isEmpty() )
|
||||||
{
|
|
||||||
styleDefinition = mArcgisStyleConfiguration;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
QNetworkRequest request = QNetworkRequest( QUrl( styleUrl ) );
|
QNetworkRequest request = QNetworkRequest( QUrl( styleUrl ) );
|
||||||
|
|
||||||
|
@ -295,9 +295,6 @@ class CORE_EXPORT QgsVectorTileLayer : public QgsMapLayer
|
|||||||
//! Whether we draw borders of tiles
|
//! Whether we draw borders of tiles
|
||||||
bool mTileBorderRendering = false;
|
bool mTileBorderRendering = false;
|
||||||
|
|
||||||
QVariantMap mArcgisLayerConfiguration;
|
|
||||||
QVariantMap mArcgisStyleConfiguration;
|
|
||||||
|
|
||||||
QgsCoordinateTransformContext mTransformContext;
|
QgsCoordinateTransformContext mTransformContext;
|
||||||
|
|
||||||
std::unique_ptr< QgsDataProvider > mDataProvider;
|
std::unique_ptr< QgsDataProvider > mDataProvider;
|
||||||
|
@ -57,6 +57,12 @@ QgsVtpkVectorTileDataProvider::QgsVtpkVectorTileDataProvider( const QString &uri
|
|||||||
mCrs = mMatrixSet.crs();
|
mCrs = mMatrixSet.crs();
|
||||||
mExtent = reader.extent( transformContext() );
|
mExtent = reader.extent( transformContext() );
|
||||||
mLayerMetadata = reader.layerMetadata();
|
mLayerMetadata = reader.layerMetadata();
|
||||||
|
mStyleDefinition = reader.styleDefinition();
|
||||||
|
mSpriteDefinition = reader.spriteDefinition();
|
||||||
|
if ( !mSpriteDefinition.isEmpty() )
|
||||||
|
{
|
||||||
|
mSpriteImage = reader.spriteImage();
|
||||||
|
}
|
||||||
|
|
||||||
mIsValid = true;
|
mIsValid = true;
|
||||||
}
|
}
|
||||||
@ -131,6 +137,27 @@ const QgsVectorTileMatrixSet &QgsVtpkVectorTileDataProvider::tileMatrixSet() con
|
|||||||
return mMatrixSet;
|
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
|
QByteArray QgsVtpkVectorTileDataProvider::readTile( const QgsTileMatrix &, const QgsTileXYZ &id, QgsFeedback *feedback ) const
|
||||||
{
|
{
|
||||||
QGIS_PROTECT_QOBJECT_THREAD_ACCESS
|
QGIS_PROTECT_QOBJECT_THREAD_ACCESS
|
||||||
|
@ -22,6 +22,8 @@
|
|||||||
#include "qgsprovidermetadata.h"
|
#include "qgsprovidermetadata.h"
|
||||||
#include "qgsvectortilematrixset.h"
|
#include "qgsvectortilematrixset.h"
|
||||||
|
|
||||||
|
#include <QImage>
|
||||||
|
|
||||||
#define SIP_NO_FILE
|
#define SIP_NO_FILE
|
||||||
|
|
||||||
///@cond PRIVATE
|
///@cond PRIVATE
|
||||||
@ -47,6 +49,9 @@ class CORE_EXPORT QgsVtpkVectorTileDataProvider : public QgsVectorTileDataProvid
|
|||||||
QgsRectangle extent() const override;
|
QgsRectangle extent() const override;
|
||||||
QgsLayerMetadata layerMetadata() const override;
|
QgsLayerMetadata layerMetadata() const override;
|
||||||
const QgsVectorTileMatrixSet &tileMatrixSet() 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;
|
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;
|
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;
|
QgsRectangle mExtent;
|
||||||
QgsVectorTileMatrixSet mMatrixSet;
|
QgsVectorTileMatrixSet mMatrixSet;
|
||||||
QgsLayerMetadata mLayerMetadata;
|
QgsLayerMetadata mLayerMetadata;
|
||||||
|
QVariantMap mStyleDefinition;
|
||||||
|
QVariantMap mSpriteDefinition;
|
||||||
|
QImage mSpriteImage;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user