QGIS API Documentation 3.43.0-Master (8fc5848dca1)
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 "qgis_core.h"
20#include "qgis_sip.h"
21#include "qgsproperty.h"
23
24#include <memory>
25#include <QVariantMap>
26#include <QImage>
27
32class QgsMapLayer;
33class QgsRasterLayer;
34
42{
43 public:
44
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
163 QStringList mWarnings;
164
165 QString mLayerId;
166
168
169 double mSizeConversionFactor = 1.0;
170
171 QMap<QString, QImage> mSpriteImage;
172 QMap<QString, QVariantMap> mSpriteDefinitions;
173};
174
175
176
177
185{
186 public:
187
188#ifdef SIP_RUN
190
191 switch ( sipCpp->type() )
192 {
194 sipType = sipType_QgsMapBoxGlStyleRasterSource;
195 break;
196 default:
197 sipType = 0;
198 break;
199 }
200 SIP_END
201#endif
202
206 QgsMapBoxGlStyleAbstractSource( const QString &name );
207
209
214
218 virtual bool setFromJson( const QVariantMap &json, QgsMapBoxGlStyleConversionContext *context ) = 0;
219
223 QString name() const;
224
225 private:
226
227 QString mName;
228};
229
230
238{
239 public:
240
244 QgsMapBoxGlStyleRasterSource( const QString &name );
245
246 Qgis::MapBoxGlStyleSourceType type() const override;
247 bool setFromJson( const QVariantMap &json, QgsMapBoxGlStyleConversionContext *context ) override;
248
252 QString attribution() const { return mAttribution; }
253
259 int minimumZoom() const { return mMinZoom; }
260
266 int maximumZoom() const { return mMaxZoom; }
267
271 int tileSize() const { return mTileSize; }
272
276 QStringList tiles() const { return mTiles; }
277
283 QgsRasterLayer *toRasterLayer() const SIP_FACTORY;
284
285 private:
286
287 QStringList mTiles;
288 QString mAttribution;
289 int mMinZoom = 0;
290 int mMaxZoom = 22;
291 int mTileSize = 512;
292};
293
294
295
303{
304 public:
305
309 QgsMapBoxGlStyleRasterSubLayer( const QString &id, const QString &source );
310
314 QString id() const { return mId; }
315
319 QString source() const { return mSource; }
320
324 QgsPropertyCollection &dataDefinedProperties() { return mDataDefinedProperties; }
325
329 const QgsPropertyCollection &dataDefinedProperties() const SIP_SKIP { return mDataDefinedProperties; }
330
331 private:
332
333 QString mId;
334 QString mSource;
335 QgsPropertyCollection mDataDefinedProperties;
336
337};
338
339
352{
353 Q_GADGET
354
355 public:
356
361
364
366
369 {
370 Success = 0,
371 NoLayerList = 1,
372 };
373
378 enum class PropertyType
379 {
380 Color,
381 Numeric,
382 Opacity,
383 Point,
384 NumericArray,
385 };
386 Q_ENUM( PropertyType )
387
388
399 Result convert( const QVariantMap &style, QgsMapBoxGlStyleConversionContext *context = nullptr );
400
412 Result convert( const QString &style, QgsMapBoxGlStyleConversionContext *context = nullptr );
413
420 QString errorMessage() const { return mError; }
421
428 QStringList warnings() const { return mWarnings; }
429
434 QgsVectorTileRenderer *renderer() const SIP_FACTORY;
435
440 QgsVectorTileLabeling *labeling() const SIP_FACTORY;
441
447 QList< QgsMapBoxGlStyleAbstractSource * > sources();
448
454 QList< QgsMapBoxGlStyleRasterSubLayer > rasterSubLayers() const;
455
463 QList< QgsMapLayer * > createSubLayers() const SIP_FACTORY;
464
465 protected:
466
473 void parseSources( const QVariantMap &sources, QgsMapBoxGlStyleConversionContext *context = nullptr );
474
481 void parseRasterSource( const QVariantMap &source, const QString &name, QgsMapBoxGlStyleConversionContext *context = nullptr );
482
487 void parseLayers( const QVariantList &layers, QgsMapBoxGlStyleConversionContext *context = nullptr );
488
500 static bool parseFillLayer( const QVariantMap &jsonLayer, QgsVectorTileBasicRendererStyle &style SIP_OUT, QgsMapBoxGlStyleConversionContext &context, bool isBackgroundStyle = false );
501
512 static bool parseLineLayer( const QVariantMap &jsonLayer, QgsVectorTileBasicRendererStyle &style SIP_OUT, QgsMapBoxGlStyleConversionContext &context );
513
524 static bool parseCircleLayer( const QVariantMap &jsonLayer, QgsVectorTileBasicRendererStyle &style SIP_OUT, QgsMapBoxGlStyleConversionContext &context );
525
538 static void parseSymbolLayer( const QVariantMap &jsonLayer,
540 bool &hasRenderer SIP_OUT,
542 bool &hasLabeling SIP_OUT, QgsMapBoxGlStyleConversionContext &context );
543
555 static bool parseSymbolLayerAsRenderer( const QVariantMap &jsonLayer,
557
567 static QgsProperty parseInterpolateColorByZoom( const QVariantMap &json, QgsMapBoxGlStyleConversionContext &context, QColor *defaultColor SIP_OUT = nullptr );
568
579 static QgsProperty parseInterpolateByZoom( const QVariantMap &json, QgsMapBoxGlStyleConversionContext &context, double multiplier = 1, double *defaultNumber SIP_OUT = nullptr );
580
588 static QgsProperty parseInterpolateOpacityByZoom( const QVariantMap &json, int maxOpacity, QgsMapBoxGlStyleConversionContext *contextPtr = 0 );
589
596 static QString parseOpacityStops( double base, const QVariantList &stops, int maxOpacity, QgsMapBoxGlStyleConversionContext &context );
597
604 static QgsProperty parseInterpolatePointByZoom( const QVariantMap &json, QgsMapBoxGlStyleConversionContext &context, double multiplier = 1, QPointF *defaultPoint SIP_OUT = nullptr );
605
612 static QgsProperty parseInterpolateStringByZoom( const QVariantMap &json, QgsMapBoxGlStyleConversionContext &context,
613 const QVariantMap &conversionMap,
614 QString *defaultString SIP_OUT = nullptr );
615
622 static QString parsePointStops( double base, const QVariantList &stops, QgsMapBoxGlStyleConversionContext &context, double multiplier = 1 );
623
629 static QString parseArrayStops( const QVariantList &stops, QgsMapBoxGlStyleConversionContext &context, double multiplier = 1 );
630
639 static QString parseStops( double base, const QVariantList &stops, double multiplier, QgsMapBoxGlStyleConversionContext &context );
640
651 static QString parseStringStops( const QVariantList &stops, QgsMapBoxGlStyleConversionContext &context,
652 const QVariantMap &conversionMap,
653 QString *defaultString SIP_OUT = nullptr );
654
655
664 static QString parseLabelStops( const QVariantList &stops, QgsMapBoxGlStyleConversionContext &context );
665
671 static QgsProperty parseValueList( const QVariantList &json, PropertyType type, QgsMapBoxGlStyleConversionContext &context, double multiplier = 1,
672 int maxOpacity = 255, QColor *defaultColor SIP_OUT = nullptr, double *defaultNumber SIP_OUT = nullptr );
673
674
680 static QgsProperty parseMatchList( const QVariantList &json, PropertyType type, QgsMapBoxGlStyleConversionContext &context, double multiplier = 1,
681 int maxOpacity = 255, QColor *defaultColor SIP_OUT = nullptr, double *defaultNumber SIP_OUT = nullptr );
682
688 static QgsProperty parseStepList( const QVariantList &json, PropertyType type, QgsMapBoxGlStyleConversionContext &context, double multiplier = 1,
689 int maxOpacity = 255, QColor *defaultColor SIP_OUT = nullptr, double *defaultNumber SIP_OUT = nullptr );
690
698 static QgsProperty parseInterpolateListByZoom( const QVariantList &json, PropertyType type, QgsMapBoxGlStyleConversionContext &context, double multiplier = 1,
699 int maxOpacity = 255, QColor *defaultColor SIP_OUT = nullptr, double *defaultNumber SIP_OUT = nullptr );
700
708 static QString parseColorExpression( const QVariant &colorExpression, QgsMapBoxGlStyleConversionContext &context );
709
721 static QColor parseColor( const QVariant &color, QgsMapBoxGlStyleConversionContext &context );
722
733 static void colorAsHslaComponents( const QColor &color, int &hue, int &saturation, int &lightness, int &alpha );
734
741 static QString interpolateExpression( double zoomMin, double zoomMax, QVariant valueMin, QVariant valueMax, double base, double multiplier = 1, QgsMapBoxGlStyleConversionContext *contextPtr = 0 );
742
748 static Qt::PenCapStyle parseCapStyle( const QString &style );
749
755 static Qt::PenJoinStyle parseJoinStyle( const QString &style );
756
762 static QString parseExpression( const QVariantList &expression, QgsMapBoxGlStyleConversionContext &context, bool colorExpected = false );
763
770 static QImage retrieveSprite( const QString &name, QgsMapBoxGlStyleConversionContext &context, QSize &spriteSize );
771
778 static QString retrieveSpriteAsBase64( const QVariant &value, QgsMapBoxGlStyleConversionContext &context )
779 {
780 QSize spriteSize;
781 QString spriteProperty;
782 QString spriteSizeProperty;
783 return retrieveSpriteAsBase64WithProperties( value, context, spriteSize, spriteProperty, spriteSizeProperty );
784 }
785
794 static QString retrieveSpriteAsBase64WithProperties( const QVariant &value, QgsMapBoxGlStyleConversionContext &context, QSize &spriteSize SIP_OUT, QString &spriteProperty SIP_OUT, QString &spriteSizeProperty SIP_OUT );
795
796 private:
797
798#ifdef SIP_RUN
800#endif
801
802 static QString parseValue( const QVariant &value, QgsMapBoxGlStyleConversionContext &context, bool colorExpected = false );
803
804 static QString parseKey( const QVariant &value, QgsMapBoxGlStyleConversionContext &context );
805
806 static QString processLabelField( const QString &string, bool &isExpression );
807
816 static bool numericArgumentsOnly( const QVariant &bottomVariant, const QVariant &topVariant, double &bottom, double &top );
817
818 QString mError;
819 QStringList mWarnings;
820
821 std::unique_ptr< QgsVectorTileRenderer > mRenderer;
822 std::unique_ptr< QgsVectorTileLabeling > mLabeling;
823
824 QList< QgsMapBoxGlStyleAbstractSource * > mSources;
825 QList< QgsMapBoxGlStyleRasterSubLayer> mRasterSubLayers;
826
827};
828
829#endif // QGSMAPBOXGLSTYLECONVERTER_H
RenderUnit
Rendering size units.
Definition qgis.h:5045
MapBoxGlStyleSourceType
Available MapBox GL style source types.
Definition qgis.h:4234
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.
virtual Qgis::MapBoxGlStyleSourceType type() const =0
Returns the source type.
Context for a MapBox GL style conversion operation.
QStringList warnings() const
Returns a list of warning messages 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.
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
Encapsulates a MapBox GL style raster source.
int maximumZoom() const
Returns the maximum tile zoom for which tiles are available.
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.
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.
Base class for all map layer types.
Definition qgsmaplayer.h:77
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:191
#define SIP_SKIP
Definition qgis_sip.h:126
#define SIP_OUT
Definition qgis_sip.h:58
#define SIP_FACTORY
Definition qgis_sip.h:76
#define SIP_END
Definition qgis_sip.h:208
QgsExpressionNode * parseExpression(const QString &str, QString &parserErrorMsg, QList< QgsExpression::ParserError > &parserErrors)