QGIS API Documentation 3.99.0-Master (752b475928d)
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:
45
49 void pushWarning( const QString &warning );
50
54 QStringList warnings() const { return mWarnings; }
55
59 void clearWarnings() { mWarnings.clear(); }
60
71 Qgis::RenderUnit targetUnit() const;
72
88 void setTargetUnit( Qgis::RenderUnit targetUnit );
89
96 double pixelSizeConversionFactor() const;
97
104 void setPixelSizeConversionFactor( double sizeConversionFactor );
105
113 QStringList spriteCategories() const;
114
122 QImage spriteImage( const QString &category = QString() ) const;
123
130 QVariantMap spriteDefinitions( const QString &category = QString() ) const;
131
138 void setSprites( const QImage &image, const QVariantMap &definitions, const QString &category = QString() );
139
146 void setSprites( const QImage &image, const QString &definitions, const QString &category = QString() );
147
153 QString layerId() const;
154
160 void setLayerId( const QString &value );
161
162 private:
163
164 QStringList mWarnings;
165
166 QString mLayerId;
167
169
170 double mSizeConversionFactor = 1.0;
171
172 QMap<QString, QImage> mSpriteImage;
173 QMap<QString, QVariantMap> mSpriteDefinitions;
174};
175
176
177
178
186{
187 public:
188
189#ifdef SIP_RUN
191
192 switch ( sipCpp->type() )
193 {
195 sipType = sipType_QgsMapBoxGlStyleRasterSource;
196 break;
197 default:
198 sipType = 0;
199 break;
200 }
201 SIP_END
202#endif
203
207 QgsMapBoxGlStyleAbstractSource( const QString &name );
208
210
215
219 virtual bool setFromJson( const QVariantMap &json, QgsMapBoxGlStyleConversionContext *context ) = 0;
220
224 QString name() const;
225
226 private:
227
228 QString mName;
229};
230
231
239{
240 public:
241
245 QgsMapBoxGlStyleRasterSource( const QString &name );
246
247 Qgis::MapBoxGlStyleSourceType type() const override;
248 bool setFromJson( const QVariantMap &json, QgsMapBoxGlStyleConversionContext *context ) override;
249
253 QString attribution() const { return mAttribution; }
254
260 int minimumZoom() const { return mMinZoom; }
261
267 int maximumZoom() const { return mMaxZoom; }
268
272 int tileSize() const { return mTileSize; }
273
277 QStringList tiles() const { return mTiles; }
278
284 QgsRasterLayer *toRasterLayer() const SIP_FACTORY;
285
286 private:
287
288 QStringList mTiles;
289 QString mAttribution;
290 int mMinZoom = 0;
291 int mMaxZoom = 22;
292 int mTileSize = 512;
293};
294
295
296
304{
305 public:
306
310 QgsMapBoxGlStyleRasterSubLayer( const QString &id, const QString &source );
311
315 QString id() const { return mId; }
316
320 QString source() const { return mSource; }
321
325 QgsPropertyCollection &dataDefinedProperties() { return mDataDefinedProperties; }
326
330 const QgsPropertyCollection &dataDefinedProperties() const SIP_SKIP { return mDataDefinedProperties; }
331
332 private:
333
334 QString mId;
335 QString mSource;
336 QgsPropertyCollection mDataDefinedProperties;
337
338};
339
340
353{
354 Q_GADGET
355
356 public:
357
362
365
367
370 {
373 };
374
379 enum class PropertyType
380 {
381 Color,
382 Numeric,
383 Opacity,
384 Point,
385 NumericArray,
386 };
387 Q_ENUM( PropertyType )
388
389
400 Result convert( const QVariantMap &style, QgsMapBoxGlStyleConversionContext *context = nullptr );
401
413 Result convert( const QString &style, QgsMapBoxGlStyleConversionContext *context = nullptr );
414
421 QString errorMessage() const { return mError; }
422
429 QStringList warnings() const { return mWarnings; }
430
435 QgsVectorTileRenderer *renderer() const SIP_FACTORY;
436
441 QgsVectorTileLabeling *labeling() const SIP_FACTORY;
442
448 QList< QgsMapBoxGlStyleAbstractSource * > sources();
449
455 QList< QgsMapBoxGlStyleRasterSubLayer > rasterSubLayers() const;
456
464 QList< QgsMapLayer * > createSubLayers() const SIP_FACTORY;
465
466 protected:
467
474 void parseSources( const QVariantMap &sources, QgsMapBoxGlStyleConversionContext *context = nullptr );
475
482 void parseRasterSource( const QVariantMap &source, const QString &name, QgsMapBoxGlStyleConversionContext *context = nullptr );
483
488 void parseLayers( const QVariantList &layers, QgsMapBoxGlStyleConversionContext *context = nullptr );
489
501 static bool parseFillLayer( const QVariantMap &jsonLayer, QgsVectorTileBasicRendererStyle &style SIP_OUT, QgsMapBoxGlStyleConversionContext &context, bool isBackgroundStyle = false );
502
513 static bool parseLineLayer( const QVariantMap &jsonLayer, QgsVectorTileBasicRendererStyle &style SIP_OUT, QgsMapBoxGlStyleConversionContext &context );
514
525 static bool parseCircleLayer( const QVariantMap &jsonLayer, QgsVectorTileBasicRendererStyle &style SIP_OUT, QgsMapBoxGlStyleConversionContext &context );
526
539 static void parseSymbolLayer( const QVariantMap &jsonLayer,
541 bool &hasRenderer SIP_OUT,
543 bool &hasLabeling SIP_OUT, QgsMapBoxGlStyleConversionContext &context );
544
556 static bool parseSymbolLayerAsRenderer( const QVariantMap &jsonLayer,
558
568 static QgsProperty parseInterpolateColorByZoom( const QVariantMap &json, QgsMapBoxGlStyleConversionContext &context, QColor *defaultColor SIP_OUT = nullptr );
569
580 static QgsProperty parseInterpolateByZoom( const QVariantMap &json, QgsMapBoxGlStyleConversionContext &context, double multiplier = 1, double *defaultNumber SIP_OUT = nullptr );
581
589 static QgsProperty parseInterpolateOpacityByZoom( const QVariantMap &json, int maxOpacity, QgsMapBoxGlStyleConversionContext *contextPtr = nullptr );
590
597 static QString parseOpacityStops( double base, const QVariantList &stops, int maxOpacity, QgsMapBoxGlStyleConversionContext &context );
598
605 static QgsProperty parseInterpolatePointByZoom( const QVariantMap &json, QgsMapBoxGlStyleConversionContext &context, double multiplier = 1, QPointF *defaultPoint SIP_OUT = nullptr );
606
613 static QgsProperty parseInterpolateStringByZoom( const QVariantMap &json, QgsMapBoxGlStyleConversionContext &context,
614 const QVariantMap &conversionMap,
615 QString *defaultString SIP_OUT = nullptr );
616
623 static QString parsePointStops( double base, const QVariantList &stops, QgsMapBoxGlStyleConversionContext &context, double multiplier = 1 );
624
630 static QString parseArrayStops( const QVariantList &stops, QgsMapBoxGlStyleConversionContext &context, double multiplier = 1 );
631
640 static QString parseStops( double base, const QVariantList &stops, double multiplier, QgsMapBoxGlStyleConversionContext &context );
641
652 static QString parseStringStops( const QVariantList &stops, QgsMapBoxGlStyleConversionContext &context,
653 const QVariantMap &conversionMap,
654 QString *defaultString SIP_OUT = nullptr );
655
656
665 static QString parseLabelStops( const QVariantList &stops, QgsMapBoxGlStyleConversionContext &context );
666
672 static QgsProperty parseValueList( const QVariantList &json, PropertyType type, QgsMapBoxGlStyleConversionContext &context, double multiplier = 1,
673 int maxOpacity = 255, QColor *defaultColor SIP_OUT = nullptr, double *defaultNumber SIP_OUT = nullptr );
674
675
681 static QgsProperty parseMatchList( const QVariantList &json, PropertyType type, QgsMapBoxGlStyleConversionContext &context, double multiplier = 1,
682 int maxOpacity = 255, QColor *defaultColor SIP_OUT = nullptr, double *defaultNumber SIP_OUT = nullptr );
683
689 static QgsProperty parseStepList( const QVariantList &json, PropertyType type, QgsMapBoxGlStyleConversionContext &context, double multiplier = 1,
690 int maxOpacity = 255, QColor *defaultColor SIP_OUT = nullptr, double *defaultNumber SIP_OUT = nullptr );
691
699 static QgsProperty parseInterpolateListByZoom( const QVariantList &json, PropertyType type, QgsMapBoxGlStyleConversionContext &context, double multiplier = 1,
700 int maxOpacity = 255, QColor *defaultColor SIP_OUT = nullptr, double *defaultNumber SIP_OUT = nullptr );
701
709 static QString parseColorExpression( const QVariant &colorExpression, QgsMapBoxGlStyleConversionContext &context );
710
722 static QColor parseColor( const QVariant &color, QgsMapBoxGlStyleConversionContext &context );
723
734 static void colorAsHslaComponents( const QColor &color, int &hue, int &saturation, int &lightness, int &alpha );
735
742 static QString interpolateExpression( double zoomMin, double zoomMax, QVariant valueMin, QVariant valueMax, double base, double multiplier = 1, QgsMapBoxGlStyleConversionContext *contextPtr = nullptr );
743
749 static Qt::PenCapStyle parseCapStyle( const QString &style );
750
756 static Qt::PenJoinStyle parseJoinStyle( const QString &style );
757
763 static QString parseExpression( const QVariantList &expression, QgsMapBoxGlStyleConversionContext &context, bool colorExpected = false );
764
771 static QImage retrieveSprite( const QString &name, QgsMapBoxGlStyleConversionContext &context, QSize &spriteSize );
772
779 static QString retrieveSpriteAsBase64( const QVariant &value, QgsMapBoxGlStyleConversionContext &context )
780 {
781 QSize spriteSize;
782 QString spriteProperty;
783 QString spriteSizeProperty;
784 return retrieveSpriteAsBase64WithProperties( value, context, spriteSize, spriteProperty, spriteSizeProperty );
785 }
786
795 static QString retrieveSpriteAsBase64WithProperties( const QVariant &value, QgsMapBoxGlStyleConversionContext &context, QSize &spriteSize SIP_OUT, QString &spriteProperty SIP_OUT, QString &spriteSizeProperty SIP_OUT );
796
797 private:
798
799#ifdef SIP_RUN
801#endif
802
803 static QString parseValue( const QVariant &value, QgsMapBoxGlStyleConversionContext &context, bool colorExpected = false );
804
805 static QString parseKey( const QVariant &value, QgsMapBoxGlStyleConversionContext &context );
806
807 static QString processLabelField( const QString &string, bool &isExpression );
808
817 static bool numericArgumentsOnly( const QVariant &bottomVariant, const QVariant &topVariant, double &bottom, double &top );
818
819 QString mError;
820 QStringList mWarnings;
821
822 std::unique_ptr< QgsVectorTileRenderer > mRenderer;
823 std::unique_ptr< QgsVectorTileLabeling > mLabeling;
824
825 QList< QgsMapBoxGlStyleAbstractSource * > mSources;
826 QList< QgsMapBoxGlStyleRasterSubLayer> mRasterSubLayers;
827
828};
829
830#endif // QGSMAPBOXGLSTYLECONVERTER_H
RenderUnit
Rendering size units.
Definition qgis.h:5183
@ Pixels
Pixels.
Definition qgis.h:5186
MapBoxGlStyleSourceType
Available MapBox GL style source types.
Definition qgis.h:4352
@ Raster
Raster source.
Definition qgis.h:4354
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:80
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:199
#define SIP_SKIP
Definition qgis_sip.h:134
#define SIP_OUT
Definition qgis_sip.h:58
#define SIP_FACTORY
Definition qgis_sip.h:84
#define SIP_END
Definition qgis_sip.h:216
QgsExpressionNode * parseExpression(const QString &str, QString &parserErrorMsg, QList< QgsExpression::ParserError > &parserErrors)