QGIS API Documentation 4.0.0-Norrköping (1ddcee3d0e4)
Loading...
Searching...
No Matches
qgsmapboxglstyleconverter.h
Go to the documentation of this file.
1/***************************************************************************
2 qgsmapboxglstyleconverter.h
3 --------------------------------------
4 Date : September 2020
5 Copyright : (C) 2020 by Nyall Dawson
6 Email : nyall dot dawson at gmail dot com
7 ***************************************************************************
8 * *
9 * This program is free software; you can redistribute it and/or modify *
10 * it under the terms of the GNU General Public License as published by *
11 * the Free Software Foundation; either version 2 of the License, or *
12 * (at your option) any later version. *
13 * *
14 ***************************************************************************/
15
16#ifndef QGSMAPBOXGLSTYLECONVERTER_H
17#define QGSMAPBOXGLSTYLECONVERTER_H
18
19#include <memory>
20
21#include "qgis_core.h"
22#include "qgis_sip.h"
23#include "qgsproperty.h"
25
26#include <QImage>
27#include <QVariantMap>
28
33class QgsMapLayer;
34class QgsRasterLayer;
35
43{
44 public:
48 void pushWarning( const QString &warning );
49
53 QStringList warnings() const { return mWarnings; }
54
58 void clearWarnings() { mWarnings.clear(); }
59
70 Qgis::RenderUnit targetUnit() const;
71
87 void setTargetUnit( Qgis::RenderUnit targetUnit );
88
95 double pixelSizeConversionFactor() const;
96
103 void setPixelSizeConversionFactor( double sizeConversionFactor );
104
112 QStringList spriteCategories() const;
113
121 QImage spriteImage( const QString &category = QString() ) const;
122
129 QVariantMap spriteDefinitions( const QString &category = QString() ) const;
130
137 void setSprites( const QImage &image, const QVariantMap &definitions, const QString &category = QString() );
138
145 void setSprites( const QImage &image, const QString &definitions, const QString &category = QString() );
146
152 QString layerId() const;
153
159 void setLayerId( const QString &value );
160
161 private:
162 QStringList mWarnings;
163
164 QString mLayerId;
165
167
168 double mSizeConversionFactor = 1.0;
169
170 QMap<QString, QImage> mSpriteImage;
171 QMap<QString, QVariantMap> mSpriteDefinitions;
172};
173
174
182{
183 public:
184#ifdef SIP_RUN
186
187 switch ( sipCpp->type() )
188 {
190 sipType = sipType_QgsMapBoxGlStyleRasterSource;
191 break;
192 default:
193 sipType = 0;
194 break;
195 }
196 SIP_END
197#endif
198
202 QgsMapBoxGlStyleAbstractSource( const QString &name );
203
205
210
214 virtual bool setFromJson( const QVariantMap &json, QgsMapBoxGlStyleConversionContext *context ) = 0;
215
219 QString name() const;
220
221 private:
222 QString mName;
223};
224
225
233{
234 public:
238 QgsMapBoxGlStyleRasterSource( const QString &name );
239
240 Qgis::MapBoxGlStyleSourceType type() const override;
241 bool setFromJson( const QVariantMap &json, QgsMapBoxGlStyleConversionContext *context ) override;
242
246 QString attribution() const { return mAttribution; }
247
253 int minimumZoom() const { return mMinZoom; }
254
260 int maximumZoom() const { return mMaxZoom; }
261
265 int tileSize() const { return mTileSize; }
266
270 QStringList tiles() const { return mTiles; }
271
277 QgsRasterLayer *toRasterLayer() const SIP_FACTORY;
278
279 private:
280 QStringList mTiles;
281 QString mAttribution;
282 int mMinZoom = 0;
283 int mMaxZoom = 22;
284 int mTileSize = 512;
285};
286
287
295{
296 public:
300 QgsMapBoxGlStyleRasterSubLayer( const QString &id, const QString &source );
301
305 QString id() const { return mId; }
306
310 QString source() const { return mSource; }
311
315 QgsPropertyCollection &dataDefinedProperties() { return mDataDefinedProperties; }
316
320 const QgsPropertyCollection &dataDefinedProperties() const SIP_SKIP { return mDataDefinedProperties; }
321
322 private:
323 QString mId;
324 QString mSource;
325 QgsPropertyCollection mDataDefinedProperties;
326};
327
328
341{
342 Q_GADGET
343
344 public:
349
352
354
357 {
360 };
361
366 enum class PropertyType
367 {
368 Color,
369 Numeric,
370 Opacity,
371 Point,
372 NumericArray,
373 };
374 Q_ENUM( PropertyType )
375
376
387 Result convert( const QVariantMap &style, QgsMapBoxGlStyleConversionContext *context = nullptr );
388
400 Result convert( const QString &style, QgsMapBoxGlStyleConversionContext *context = nullptr );
401
408 QString errorMessage() const { return mError; }
409
416 QStringList warnings() const { return mWarnings; }
417
422 QgsVectorTileRenderer *renderer() const SIP_FACTORY;
423
428 QgsVectorTileLabeling *labeling() const SIP_FACTORY;
429
435 QList< QgsMapBoxGlStyleAbstractSource * > sources();
436
442 QList< QgsMapBoxGlStyleRasterSubLayer > rasterSubLayers() const;
443
451 QList< QgsMapLayer * > createSubLayers() const SIP_FACTORY;
452
453 protected:
460 void parseSources( const QVariantMap &sources, QgsMapBoxGlStyleConversionContext *context = nullptr );
461
468 void parseRasterSource( const QVariantMap &source, const QString &name, QgsMapBoxGlStyleConversionContext *context = nullptr );
469
474 void parseLayers( const QVariantList &layers, QgsMapBoxGlStyleConversionContext *context = nullptr );
475
487 static bool parseFillLayer( const QVariantMap &jsonLayer, QgsVectorTileBasicRendererStyle &style SIP_OUT, QgsMapBoxGlStyleConversionContext &context, bool isBackgroundStyle = false );
488
499 static bool parseLineLayer( const QVariantMap &jsonLayer, QgsVectorTileBasicRendererStyle &style SIP_OUT, QgsMapBoxGlStyleConversionContext &context );
500
511 static bool parseCircleLayer( const QVariantMap &jsonLayer, QgsVectorTileBasicRendererStyle &style SIP_OUT, QgsMapBoxGlStyleConversionContext &context );
512
525 static void parseSymbolLayer(
526 const QVariantMap &jsonLayer,
528 bool &hasRenderer SIP_OUT,
530 bool &hasLabeling SIP_OUT,
532 );
533
545 static bool parseSymbolLayerAsRenderer( const QVariantMap &jsonLayer, QgsVectorTileBasicRendererStyle &rendererStyle SIP_OUT, QgsMapBoxGlStyleConversionContext &context );
546
556 static QgsProperty parseInterpolateColorByZoom( const QVariantMap &json, QgsMapBoxGlStyleConversionContext &context, QColor *defaultColor SIP_OUT = nullptr );
557
568 static QgsProperty parseInterpolateByZoom( const QVariantMap &json, QgsMapBoxGlStyleConversionContext &context, double multiplier = 1, double *defaultNumber SIP_OUT = nullptr );
569
577 static QgsProperty parseInterpolateOpacityByZoom( const QVariantMap &json, int maxOpacity, QgsMapBoxGlStyleConversionContext *contextPtr = nullptr );
578
585 static QString parseOpacityStops( double base, const QVariantList &stops, int maxOpacity, QgsMapBoxGlStyleConversionContext &context );
586
593 static QgsProperty parseInterpolatePointByZoom( const QVariantMap &json, QgsMapBoxGlStyleConversionContext &context, double multiplier = 1, QPointF *defaultPoint SIP_OUT = nullptr );
594
601 static QgsProperty parseInterpolateStringByZoom( const QVariantMap &json, QgsMapBoxGlStyleConversionContext &context, const QVariantMap &conversionMap, QString *defaultString SIP_OUT = nullptr );
602
609 static QString parsePointStops( double base, const QVariantList &stops, QgsMapBoxGlStyleConversionContext &context, double multiplier = 1 );
610
616 static QString parseArrayStops( const QVariantList &stops, QgsMapBoxGlStyleConversionContext &context, double multiplier = 1 );
617
626 static QString parseStops( double base, const QVariantList &stops, double multiplier, QgsMapBoxGlStyleConversionContext &context );
627
638 static QString parseStringStops( const QVariantList &stops, QgsMapBoxGlStyleConversionContext &context, const QVariantMap &conversionMap, QString *defaultString SIP_OUT = nullptr );
639
640
649 static QString parseLabelStops( const QVariantList &stops, QgsMapBoxGlStyleConversionContext &context );
650
656 static QgsProperty parseValueList(
657 const QVariantList &json,
658 PropertyType type,
660 double multiplier = 1,
661 int maxOpacity = 255,
662 QColor *defaultColor SIP_OUT = nullptr,
663 double *defaultNumber SIP_OUT = nullptr
664 );
665
666
672 static QgsProperty parseMatchList(
673 const QVariantList &json,
674 PropertyType type,
676 double multiplier = 1,
677 int maxOpacity = 255,
678 QColor *defaultColor SIP_OUT = nullptr,
679 double *defaultNumber SIP_OUT = nullptr
680 );
681
687 static QgsProperty parseStepList(
688 const QVariantList &json,
689 PropertyType type,
691 double multiplier = 1,
692 int maxOpacity = 255,
693 QColor *defaultColor SIP_OUT = nullptr,
694 double *defaultNumber SIP_OUT = nullptr
695 );
696
704 static QgsProperty parseInterpolateListByZoom(
705 const QVariantList &json,
706 PropertyType type,
708 double multiplier = 1,
709 int maxOpacity = 255,
710 QColor *defaultColor SIP_OUT = nullptr,
711 double *defaultNumber SIP_OUT = nullptr
712 );
713
721 static QString parseColorExpression( const QVariant &colorExpression, QgsMapBoxGlStyleConversionContext &context );
722
734 static QColor parseColor( const QVariant &color, QgsMapBoxGlStyleConversionContext &context );
735
746 static void colorAsHslaComponents( const QColor &color, int &hue, int &saturation, int &lightness, int &alpha );
747
754 static QString interpolateExpression( double zoomMin, double zoomMax, QVariant valueMin, QVariant valueMax, double base, double multiplier = 1, QgsMapBoxGlStyleConversionContext *contextPtr = nullptr );
755
761 static Qt::PenCapStyle parseCapStyle( const QString &style );
762
768 static Qt::PenJoinStyle parseJoinStyle( const QString &style );
769
775 static QString parseExpression( const QVariantList &expression, QgsMapBoxGlStyleConversionContext &context, bool colorExpected = false );
776
783 static QImage retrieveSprite( const QString &name, QgsMapBoxGlStyleConversionContext &context, QSize &spriteSize );
784
791 static QString retrieveSpriteAsBase64( const QVariant &value, QgsMapBoxGlStyleConversionContext &context )
792 {
793 QSize spriteSize;
794 QString spriteProperty;
795 QString spriteSizeProperty;
796 return retrieveSpriteAsBase64WithProperties( value, context, spriteSize, spriteProperty, spriteSizeProperty );
797 }
798
807 static QString retrieveSpriteAsBase64WithProperties(
808 const QVariant &value, QgsMapBoxGlStyleConversionContext &context, QSize &spriteSize SIP_OUT, QString &spriteProperty SIP_OUT, QString &spriteSizeProperty SIP_OUT
809 );
810
811 private:
812#ifdef SIP_RUN
814#endif
815
816 static QString parseValue( const QVariant &value, QgsMapBoxGlStyleConversionContext &context, bool colorExpected = false );
817
818 static QString parseKey( const QVariant &value, QgsMapBoxGlStyleConversionContext &context );
819
820 static QString processLabelField( const QString &string, bool &isExpression );
821
830 static bool numericArgumentsOnly( const QVariant &bottomVariant, const QVariant &topVariant, double &bottom, double &top );
831
832 QString mError;
833 QStringList mWarnings;
834
835 std::unique_ptr< QgsVectorTileRenderer > mRenderer;
836 std::unique_ptr< QgsVectorTileLabeling > mLabeling;
837
838 QList< QgsMapBoxGlStyleAbstractSource * > mSources;
839 QList< QgsMapBoxGlStyleRasterSubLayer> mRasterSubLayers;
840};
841
842#endif // QGSMAPBOXGLSTYLECONVERTER_H
RenderUnit
Rendering size units.
Definition qgis.h:5340
@ Pixels
Pixels.
Definition qgis.h:5343
MapBoxGlStyleSourceType
Available MapBox GL style source types.
Definition qgis.h:4496
@ Raster
Raster source.
Definition qgis.h:4498
Abstract base class for MapBox GL style sources.
virtual bool setFromJson(const QVariantMap &json, QgsMapBoxGlStyleConversionContext *context)=0
Sets the source's state from a json map.
QString name() const
Returns the source's name.
virtual Qgis::MapBoxGlStyleSourceType type() const =0
Returns the source type.
QgsMapBoxGlStyleAbstractSource(const QString &name)
Constructor for QgsMapBoxGlStyleAbstractSource.
Context for a MapBox GL style conversion operation.
QStringList warnings() const
Returns a list of warning messages generated during the conversion.
void pushWarning(const QString &warning)
Pushes a warning message generated during the conversion.
void clearWarnings()
Clears the list of warning messages.
Handles conversion of MapBox GL styles to QGIS vector tile renderers and labeling settings.
PropertyType
Property types, for interpolated value conversion.
@ Success
Conversion was successful.
@ NoLayerList
No layer list was found in JSON input.
static QString retrieveSpriteAsBase64(const QVariant &value, QgsMapBoxGlStyleConversionContext &context)
Retrieves the sprite image with the specified name, taken from the specified context as a base64 enco...
QgsMapBoxGlStyleConverter()
Constructor for QgsMapBoxGlStyleConverter.
static QString retrieveSpriteAsBase64WithProperties(const QVariant &value, QgsMapBoxGlStyleConversionContext &context, QSize &spriteSize, QString &spriteProperty, QString &spriteSizeProperty)
Retrieves the sprite image with the specified name, taken from the specified context as a base64 enco...
QgsMapBoxGlStyleConverter & operator=(const QgsMapBoxGlStyleConverter &other)=delete
QString errorMessage() const
Returns a descriptive error message if an error was encountered during the style conversion,...
QStringList warnings() const
Returns a list of user-friendly warnings generated during the conversion, e.g.
QgsMapBoxGlStyleConverter(const QgsMapBoxGlStyleConverter &other)=delete
int maximumZoom() const
Returns the maximum tile zoom for which tiles are available.
Qgis::MapBoxGlStyleSourceType type() const override
Returns the source type.
QgsMapBoxGlStyleRasterSource(const QString &name)
Constructor for QgsMapBoxGlStyleRasterSource.
QString attribution() const
Returns the source's attribution text.
int tileSize() const
Returns the associated tile size.
int minimumZoom() const
Returns the minimum tile zoom for which tiles are available.
bool setFromJson(const QVariantMap &json, QgsMapBoxGlStyleConversionContext *context) override
Sets the source's state from a json map.
QStringList tiles() const
Returns the list of tile sources.
Encapsulates a MapBox GL style raster sub layer.
QString source() const
Returns the layer's source.
QString id() const
Returns the layer's ID.
QgsPropertyCollection & dataDefinedProperties()
Returns a reference to the layer's data defined properties.
const QgsPropertyCollection & dataDefinedProperties() const
Returns a reference to the layer's data defined properties.
QgsMapBoxGlStyleRasterSubLayer(const QString &id, const QString &source)
Constructor for QgsMapBoxGlStyleRasterSubLayer, with the given id and source.
Base class for all map layer types.
Definition qgsmaplayer.h:83
A grouped map of multiple QgsProperty objects, each referenced by an integer key value.
A store for object properties.
Represents a raster layer.
Configuration of a single style within QgsVectorTileBasicLabeling.
Definition of map rendering of a subset of vector tile data.
Base class for labeling configuration classes for vector tile layers.
Abstract base class for all vector tile renderer implementations.
#define SIP_CONVERT_TO_SUBCLASS_CODE(code)
Definition qgis_sip.h:198
#define SIP_SKIP
Definition qgis_sip.h:133
#define SIP_OUT
Definition qgis_sip.h:57
#define SIP_FACTORY
Definition qgis_sip.h:83
#define SIP_END
Definition qgis_sip.h:215
QgsExpressionNode * parseExpression(const QString &str, QString &parserErrorMsg, QList< QgsExpression::ParserError > &parserErrors)