QGIS API Documentation 4.1.0-Master (376402f9aeb)
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 DashArray,
374 };
375 Q_ENUM( PropertyType )
376
377
383 {
384 Linear,
385 Exponential,
386 CubicBezier,
387 };
388 Q_ENUM( InterpolationType )
389
390
401 Result convert( const QVariantMap &style, QgsMapBoxGlStyleConversionContext *context = nullptr );
402
414 Result convert( const QString &style, QgsMapBoxGlStyleConversionContext *context = nullptr );
415
422 QString errorMessage() const { return mError; }
423
430 QStringList warnings() const { return mWarnings; }
431
436 QgsVectorTileRenderer *renderer() const SIP_FACTORY;
437
442 QgsVectorTileLabeling *labeling() const SIP_FACTORY;
443
449 QList< QgsMapBoxGlStyleAbstractSource * > sources();
450
456 QList< QgsMapBoxGlStyleRasterSubLayer > rasterSubLayers() const;
457
465 QList< QgsMapLayer * > createSubLayers() const SIP_FACTORY;
466
467 protected:
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(
540 const QVariantMap &jsonLayer,
542 bool &hasRenderer SIP_OUT,
544 bool &hasLabeling SIP_OUT,
546 );
547
559 static bool parseSymbolLayerAsRenderer( const QVariantMap &jsonLayer, QgsVectorTileBasicRendererStyle &rendererStyle SIP_OUT, QgsMapBoxGlStyleConversionContext &context );
560
571 static QgsProperty parseInterpolateColorByZoom(
572 const QVariantMap &json,
574 QColor *defaultColor SIP_OUT = nullptr,
575 QgsMapBoxGlStyleConverter::InterpolationType type = QgsMapBoxGlStyleConverter::InterpolationType::Exponential
576 );
577
589 static QgsProperty parseInterpolateByZoom(
590 const QVariantMap &json,
592 double multiplier = 1,
593 double *defaultNumber SIP_OUT = nullptr,
594 QgsMapBoxGlStyleConverter::InterpolationType type = QgsMapBoxGlStyleConverter::InterpolationType::Exponential
595 );
596
604 static QgsProperty parseInterpolateOpacityByZoom(
605 const QVariantMap &json,
606 int maxOpacity,
607 QgsMapBoxGlStyleConversionContext *contextPtr = nullptr,
608 QgsMapBoxGlStyleConverter::InterpolationType type = QgsMapBoxGlStyleConverter::InterpolationType::Exponential
609 );
610
617 static QString parseOpacityStops(
618 double base,
619 const QVariantList &stops,
620 int maxOpacity,
622 QgsMapBoxGlStyleConverter::InterpolationType type = QgsMapBoxGlStyleConverter::InterpolationType::Exponential,
623 double x1 = 0,
624 double y1 = 0,
625 double x2 = 1,
626 double y2 = 1
627 );
628
635 static QgsProperty parseInterpolatePointByZoom(
636 const QVariantMap &json,
638 double multiplier = 1,
639 QPointF *defaultPoint SIP_OUT = nullptr,
640 QgsMapBoxGlStyleConverter::InterpolationType type = QgsMapBoxGlStyleConverter::InterpolationType::Exponential
641 );
642
649 static QgsProperty parseInterpolateStringByZoom( const QVariantMap &json, QgsMapBoxGlStyleConversionContext &context, const QVariantMap &conversionMap, QString *defaultString SIP_OUT = nullptr );
650
657 static QString parsePointStops(
658 double base,
659 const QVariantList &stops,
661 double multiplier = 1,
662 QgsMapBoxGlStyleConverter::InterpolationType type = QgsMapBoxGlStyleConverter::InterpolationType::Exponential,
663 double x1 = 0,
664 double y1 = 0,
665 double x2 = 0,
666 double y2 = 0
667 );
668
674 static QString parseArrayStops( const QVariantList &stops, QgsMapBoxGlStyleConversionContext &context, double multiplier = 1 );
675
689 static QString parseStops(
690 double base,
691 const QVariantList &stops,
692 double multiplier,
694 QgsMapBoxGlStyleConverter::InterpolationType type = QgsMapBoxGlStyleConverter::InterpolationType::Exponential,
695 double x1 = 0,
696 double y1 = 0,
697 double x2 = 1,
698 double y2 = 1
699 );
700
711 static QString parseStringStops( const QVariantList &stops, QgsMapBoxGlStyleConversionContext &context, const QVariantMap &conversionMap, QString *defaultString SIP_OUT = nullptr );
712
713
722 static QString parseLabelStops( const QVariantList &stops, QgsMapBoxGlStyleConversionContext &context );
723
729 static QgsProperty parseValueList(
730 const QVariantList &json,
731 PropertyType type,
733 double multiplier = 1,
734 int maxOpacity = 255,
735 QColor *defaultColor SIP_OUT = nullptr,
736 double *defaultNumber SIP_OUT = nullptr
737 );
738
739
745 static QgsProperty parseMatchList(
746 const QVariantList &json,
747 PropertyType type,
749 double multiplier = 1,
750 int maxOpacity = 255,
751 QColor *defaultColor SIP_OUT = nullptr,
752 double *defaultNumber SIP_OUT = nullptr
753 );
754
760 static QgsProperty parseStepList(
761 const QVariantList &json,
762 PropertyType type,
764 double multiplier = 1,
765 int maxOpacity = 255,
766 QColor *defaultColor SIP_OUT = nullptr,
767 double *defaultNumber SIP_OUT = nullptr
768 );
769
777 static QgsProperty parseInterpolateListByZoom(
778 const QVariantList &json,
779 PropertyType type,
781 double multiplier = 1,
782 int maxOpacity = 255,
783 QColor *defaultColor SIP_OUT = nullptr,
784 double *defaultNumber SIP_OUT = nullptr
785 );
786
794 static QString parseColorExpression( const QVariant &colorExpression, QgsMapBoxGlStyleConversionContext &context );
795
807 static QColor parseColor( const QVariant &color, QgsMapBoxGlStyleConversionContext &context );
808
819 static void colorAsHslaComponents( const QColor &color, int &hue, int &saturation, int &lightness, int &alpha );
820
827 static QString interpolateExpression(
828 double zoomMin,
829 double zoomMax,
830 QVariant valueMin,
831 QVariant valueMax,
832 double base,
833 double multiplier = 1,
834 double x1 = 0,
835 double y1 = 0,
836 double x2 = 1,
837 double y2 = 1,
838 QgsMapBoxGlStyleConverter::InterpolationType type = QgsMapBoxGlStyleConverter::InterpolationType::Exponential,
839 QgsMapBoxGlStyleConversionContext *contextPtr = nullptr
840 );
841
847 static Qt::PenCapStyle parseCapStyle( const QString &style );
848
854 static Qt::PenJoinStyle parseJoinStyle( const QString &style );
855
861 static QString parseExpression( const QVariantList &expression, QgsMapBoxGlStyleConversionContext &context, bool colorExpected = false );
862
869 static QImage retrieveSprite( const QString &name, QgsMapBoxGlStyleConversionContext &context, QSize &spriteSize );
870
877 static QString retrieveSpriteAsBase64( const QVariant &value, QgsMapBoxGlStyleConversionContext &context )
878 {
879 QSize spriteSize;
880 QString spriteProperty;
881 QString spriteSizeProperty;
882 return retrieveSpriteAsBase64WithProperties( value, context, spriteSize, spriteProperty, spriteSizeProperty );
883 }
884
893 static QString retrieveSpriteAsBase64WithProperties(
894 const QVariant &value, QgsMapBoxGlStyleConversionContext &context, QSize &spriteSize SIP_OUT, QString &spriteProperty SIP_OUT, QString &spriteSizeProperty SIP_OUT
895 );
896
897 private:
898#ifdef SIP_RUN
900#endif
901
902 static QString parseValue( const QVariant &value, QgsMapBoxGlStyleConversionContext &context, bool colorExpected = false );
903
904 static QString parseKey( const QVariant &value, QgsMapBoxGlStyleConversionContext &context );
905
906 static QString processLabelField( const QString &string, bool &isExpression );
907
916 static bool numericArgumentsOnly( const QVariant &bottomVariant, const QVariant &topVariant, double &bottom, double &top );
917
918 QString mError;
919 QStringList mWarnings;
920
921 std::unique_ptr< QgsVectorTileRenderer > mRenderer;
922 std::unique_ptr< QgsVectorTileLabeling > mLabeling;
923
924 QList< QgsMapBoxGlStyleAbstractSource * > mSources;
925 QList< QgsMapBoxGlStyleRasterSubLayer> mRasterSubLayers;
926
928};
929
930#endif // QGSMAPBOXGLSTYLECONVERTER_H
RenderUnit
Rendering size units.
Definition qgis.h:5496
@ Pixels
Pixels.
Definition qgis.h:5499
MapBoxGlStyleSourceType
Available MapBox GL style source types.
Definition qgis.h:4624
@ Raster
Raster source.
Definition qgis.h:4626
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.
InterpolationType
Interpolation types, for interpolated value conversion.
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)