QGIS API Documentation 3.39.0-Master (3aed037ce22)
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 "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
111 QImage spriteImage() const;
112
119 QVariantMap spriteDefinitions() const;
120
127 void setSprites( const QImage &image, const QVariantMap &definitions );
128
135 void setSprites( const QImage &image, const QString &definitions );
136
142 QString layerId() const;
143
149 void setLayerId( const QString &value );
150
151 private:
152
153 QStringList mWarnings;
154
155 QString mLayerId;
156
158
159 double mSizeConversionFactor = 1.0;
160
161 QImage mSpriteImage;
162 QVariantMap mSpriteDefinitions;
163};
164
165
166
167
175{
176 public:
177
178#ifdef SIP_RUN
180
181 switch ( sipCpp->type() )
182 {
184 sipType = sipType_QgsMapBoxGlStyleRasterSource;
185 break;
186 default:
187 sipType = 0;
188 break;
189 }
190 SIP_END
191#endif
192
196 QgsMapBoxGlStyleAbstractSource( const QString &name );
197
199
204
208 virtual bool setFromJson( const QVariantMap &json, QgsMapBoxGlStyleConversionContext *context ) = 0;
209
213 QString name() const;
214
215 private:
216
217 QString mName;
218};
219
220
228{
229 public:
230
234 QgsMapBoxGlStyleRasterSource( const QString &name );
235
236 Qgis::MapBoxGlStyleSourceType type() const override;
237 bool setFromJson( const QVariantMap &json, QgsMapBoxGlStyleConversionContext *context ) override;
238
242 QString attribution() const { return mAttribution; }
243
249 int minimumZoom() const { return mMinZoom; }
250
256 int maximumZoom() const { return mMaxZoom; }
257
261 int tileSize() const { return mTileSize; }
262
266 QStringList tiles() const { return mTiles; }
267
273 QgsRasterLayer *toRasterLayer() const SIP_FACTORY;
274
275 private:
276
277 QStringList mTiles;
278 QString mAttribution;
279 int mMinZoom = 0;
280 int mMaxZoom = 22;
281 int mTileSize = 512;
282};
283
284
285
293{
294 public:
295
299 QgsMapBoxGlStyleRasterSubLayer( const QString &id, const QString &source );
300
304 QString id() const { return mId; }
305
309 QString source() const { return mSource; }
310
314 QgsPropertyCollection &dataDefinedProperties() { return mDataDefinedProperties; }
315
319 const QgsPropertyCollection &dataDefinedProperties() const SIP_SKIP { return mDataDefinedProperties; }
320
321 private:
322
323 QString mId;
324 QString mSource;
325 QgsPropertyCollection mDataDefinedProperties;
326
327};
328
329
342{
343 Q_GADGET
344
345 public:
346
351
354
356
359 {
360 Success = 0,
361 NoLayerList = 1,
362 };
363
368 enum class PropertyType
369 {
370 Color,
371 Numeric,
372 Opacity,
373 Point,
374 };
375 Q_ENUM( PropertyType )
376
377
388 Result convert( const QVariantMap &style, QgsMapBoxGlStyleConversionContext *context = nullptr );
389
401 Result convert( const QString &style, QgsMapBoxGlStyleConversionContext *context = nullptr );
402
409 QString errorMessage() const { return mError; }
410
417 QStringList warnings() const { return mWarnings; }
418
423 QgsVectorTileRenderer *renderer() const SIP_FACTORY;
424
429 QgsVectorTileLabeling *labeling() const SIP_FACTORY;
430
436 QList< QgsMapBoxGlStyleAbstractSource * > sources();
437
443 QList< QgsMapBoxGlStyleRasterSubLayer > rasterSubLayers() const;
444
452 QList< QgsMapLayer * > createSubLayers() const SIP_FACTORY;
453
454 protected:
455
462 void parseSources( const QVariantMap &sources, QgsMapBoxGlStyleConversionContext *context = nullptr );
463
470 void parseRasterSource( const QVariantMap &source, const QString &name, QgsMapBoxGlStyleConversionContext *context = nullptr );
471
476 void parseLayers( const QVariantList &layers, QgsMapBoxGlStyleConversionContext *context = nullptr );
477
489 static bool parseFillLayer( const QVariantMap &jsonLayer, QgsVectorTileBasicRendererStyle &style SIP_OUT, QgsMapBoxGlStyleConversionContext &context, bool isBackgroundStyle = false );
490
501 static bool parseLineLayer( const QVariantMap &jsonLayer, QgsVectorTileBasicRendererStyle &style SIP_OUT, QgsMapBoxGlStyleConversionContext &context );
502
513 static bool parseCircleLayer( const QVariantMap &jsonLayer, QgsVectorTileBasicRendererStyle &style SIP_OUT, QgsMapBoxGlStyleConversionContext &context );
514
527 static void parseSymbolLayer( const QVariantMap &jsonLayer,
529 bool &hasRenderer SIP_OUT,
531 bool &hasLabeling SIP_OUT, QgsMapBoxGlStyleConversionContext &context );
532
544 static bool parseSymbolLayerAsRenderer( const QVariantMap &jsonLayer,
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 = 0 );
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,
602 const QVariantMap &conversionMap,
603 QString *defaultString SIP_OUT = nullptr );
604
611 static QString parsePointStops( double base, const QVariantList &stops, QgsMapBoxGlStyleConversionContext &context, double multiplier = 1 );
612
618 static QString parseArrayStops( const QVariantList &stops, QgsMapBoxGlStyleConversionContext &context, double multiplier = 1 );
619
628 static QString parseStops( double base, const QVariantList &stops, double multiplier, QgsMapBoxGlStyleConversionContext &context );
629
640 static QString parseStringStops( const QVariantList &stops, QgsMapBoxGlStyleConversionContext &context,
641 const QVariantMap &conversionMap,
642 QString *defaultString SIP_OUT = nullptr );
643
644
653 static QString parseLabelStops( const QVariantList &stops, QgsMapBoxGlStyleConversionContext &context );
654
660 static QgsProperty parseValueList( const QVariantList &json, PropertyType type, QgsMapBoxGlStyleConversionContext &context, double multiplier = 1,
661 int maxOpacity = 255, QColor *defaultColor SIP_OUT = nullptr, double *defaultNumber SIP_OUT = nullptr );
662
663
669 static QgsProperty parseMatchList( const QVariantList &json, PropertyType type, QgsMapBoxGlStyleConversionContext &context, double multiplier = 1,
670 int maxOpacity = 255, QColor *defaultColor SIP_OUT = nullptr, double *defaultNumber SIP_OUT = nullptr );
671
677 static QgsProperty parseInterpolateListByZoom( const QVariantList &json, PropertyType type, QgsMapBoxGlStyleConversionContext &context, double multiplier = 1,
678 int maxOpacity = 255, QColor *defaultColor SIP_OUT = nullptr, double *defaultNumber SIP_OUT = nullptr );
679
687 static QString parseColorExpression( const QVariant &colorExpression, QgsMapBoxGlStyleConversionContext &context );
688
700 static QColor parseColor( const QVariant &color, QgsMapBoxGlStyleConversionContext &context );
701
712 static void colorAsHslaComponents( const QColor &color, int &hue, int &saturation, int &lightness, int &alpha );
713
720 static QString interpolateExpression( double zoomMin, double zoomMax, QVariant valueMin, QVariant valueMax, double base, double multiplier = 1, QgsMapBoxGlStyleConversionContext *contextPtr = 0 );
721
727 static Qt::PenCapStyle parseCapStyle( const QString &style );
728
734 static Qt::PenJoinStyle parseJoinStyle( const QString &style );
735
741 static QString parseExpression( const QVariantList &expression, QgsMapBoxGlStyleConversionContext &context, bool colorExpected = false );
742
749 static QImage retrieveSprite( const QString &name, QgsMapBoxGlStyleConversionContext &context, QSize &spriteSize );
750
757 static QString retrieveSpriteAsBase64( const QVariant &value, QgsMapBoxGlStyleConversionContext &context, QSize &spriteSize, QString &spriteProperty, QString &spriteSizeProperty );
758
759 private:
760
761#ifdef SIP_RUN
763#endif
764
765 static QString parseValue( const QVariant &value, QgsMapBoxGlStyleConversionContext &context, bool colorExpected = false );
766
767 static QString parseKey( const QVariant &value, QgsMapBoxGlStyleConversionContext &context );
768
769 static QString processLabelField( const QString &string, bool &isExpression );
770
779 static bool numericArgumentsOnly( const QVariant &bottomVariant, const QVariant &topVariant, double &bottom, double &top );
780
781 QString mError;
782 QStringList mWarnings;
783
784 std::unique_ptr< QgsVectorTileRenderer > mRenderer;
785 std::unique_ptr< QgsVectorTileLabeling > mLabeling;
786
787 QList< QgsMapBoxGlStyleAbstractSource * > mSources;
788 QList< QgsMapBoxGlStyleRasterSubLayer> mRasterSubLayers;
789
790};
791
792#endif // QGSMAPBOXGLSTYLECONVERTER_H
RenderUnit
Rendering size units.
Definition qgis.h:4594
MapBoxGlStyleSourceType
Available MapBox GL style source types.
Definition qgis.h:3864
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:75
A grouped map of multiple QgsProperty objects, each referenced by a 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)