QGIS API Documentation 4.3.0-Master (0d5b841b09e)
Loading...
Searching...
No Matches
qgsalgorithmxyztiles.h
Go to the documentation of this file.
1/***************************************************************************
2 qgsalgorithmxyztiles.h
3 ---------------------
4 begin : August 2023
5 copyright : (C) 2023 by Alexander Bruy
6 email : alexander dot bruy at gmail dot com
7 ***************************************************************************/
8
9/***************************************************************************
10 * *
11 * This program is free software; you can redistribute it and/or modify *
12 * it under the terms of the GNU General Public License as published by *
13 * the Free Software Foundation; either version 2 of the License, or *
14 * (at your option) any later version. *
15 * *
16 ***************************************************************************/
17
18#ifndef QGSALGORITHMXYZTILES_H
19#define QGSALGORITHMXYZTILES_H
20
21#include <atomic>
22
23#include "qgis_sip.h"
25#include "qgsmbtiles.h"
27#include "qobjectuniqueptr.h"
28
29#define SIP_NO_FILE
30
32
33class PendingTilesToWriteQueue;
34
35struct Tile
36{
37 Tile( const int x, const int y, const int z )
38 : x( x )
39 , y( y )
40 , z( z )
41 {}
42
43 int x;
44 int y;
45 int z;
46};
47
48struct MetaTile
49{
50 MetaTile() {}
51
52 void addTile( const int row, const int col, Tile tileToAdd );
53
54 QgsRectangle extent() const;
55
56 QMap<QPair<int, int>, Tile> tiles;
57 int rows = 0;
58 int cols = 0;
59};
60
64class QgsXyzTilesBaseAlgorithm : public QgsProcessingAlgorithm
65{
66 public:
67 QString group() const override;
68 QString groupId() const override;
70
71 protected:
75 void createCommonParameters();
76
77 bool prepareAlgorithm( const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override;
78
79 void checkLayersUsagePolicy( QgsProcessingFeedback *feedback );
80
81 void startJobs( QgsProcessingFeedback *feedback );
82 void checkPipelineFinished( QgsProcessingFeedback *feedback );
83 virtual void processMetaTile( const MetaTile &metaTile, const QImage &renderedImg, QgsProcessingFeedback *feedback ) = 0;
84
85 std::optional<QgsMapSettings> mapSettingsForTile( const MetaTile &metaTile ) const;
86
87 QgsRectangle mExtent;
88 QColor mBackgroundColor;
89 int mMinZoom = 12;
90 int mMaxZoom = 12;
91 int mDpi = 96;
92 bool mAntialias = true;
93 int mJpgQuality = 75;
94 int mMetaTileSize = 4;
95 int mThreadsNumber = 1;
96 int mTileWidth = 256;
97 int mTileHeight = 256;
98 bool mSkipEmptyTiles = false;
99 QgsExpressionContext mExpressionContext;
100 QString mTileFormat;
101 QList<QgsMapLayer *> mLayers;
102 QgsRectangle mWgs84Extent;
103 QObjectUniquePtr<QObject> mJobOwner = nullptr;
104 std::unique_ptr<QThreadPool> mPostProcessingPool;
105
106 long long mTotalMetaTiles = 0;
107 std::atomic<long long> mProcessedMetaTiles { 0 };
108 std::atomic<long long> mTilesWritten { 0 };
109 std::atomic<long long> mEmptyTiles { 0 };
110 std::atomic<int> mActivePostProcessingTasks { 0 };
111 QgsCoordinateTransformContext mTransformContext;
112 QString mEllipsoid;
113 QPointer<QEventLoop> mEventLoop;
114 QList<MetaTile> mMetaTiles;
115 QMap<QgsMapRendererSequentialJob *, MetaTile> mRendererJobs;
117};
118
119
123class QgsXyzTilesDirectoryAlgorithm : public QgsXyzTilesBaseAlgorithm
124{
125 public:
126 QgsXyzTilesDirectoryAlgorithm() = default;
127 void initAlgorithm( const QVariantMap &configuration = QVariantMap() ) override;
128 QString name() const override;
129 QString displayName() const override;
130 QStringList tags() const override;
131 QString shortHelpString() const override;
132 QgsXyzTilesDirectoryAlgorithm *createInstance() const override SIP_FACTORY;
133
134 protected:
135 QVariantMap processAlgorithm( const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override;
136
137 void processMetaTile( const MetaTile &metaTile, const QImage &renderedImg, QgsProcessingFeedback *feedback ) override;
138
139 private:
140 bool mTms = false;
141 QString mOutputDir;
142 void doExport( QgsProcessingFeedback *feedback );
143};
144
148class QgsXyzTilesMbtilesAlgorithm : public QgsXyzTilesBaseAlgorithm
149{
150 public:
151 QgsXyzTilesMbtilesAlgorithm() = default;
152 void initAlgorithm( const QVariantMap &configuration = QVariantMap() ) override;
153 QString name() const override;
154 QString displayName() const override;
155 QStringList tags() const override;
156 QString shortHelpString() const override;
157 QgsXyzTilesMbtilesAlgorithm *createInstance() const override SIP_FACTORY;
158
159 protected:
160 QVariantMap processAlgorithm( const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override;
161
162 void processMetaTile( const MetaTile &metaTile, const QImage &renderedImg, QgsProcessingFeedback *feedback ) override;
163
164 private:
165 std::unique_ptr<QgsMbTiles> mMbtilesWriter;
166 PendingTilesToWriteQueue *mWriteQueue = nullptr;
167 void doExport( QgsProcessingFeedback *feedback );
168};
169
171
172#endif // QGSALGORITHMXYZTILES_H
QFlags< ProcessingAlgorithmFlag > ProcessingAlgorithmFlags
Flags indicating how and when an algorithm operates and should be exposed to users.
Definition qgis.h:3828
ScaleCalculationMethod
Scale calculation logic.
Definition qgis.h:5811
@ HorizontalMiddle
Calculate horizontally, across midle of map.
Definition qgis.h:5813
Abstract base class for processing algorithms.
virtual QString group() const
Returns the name of the group this algorithm belongs to.
virtual bool prepareAlgorithm(const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback *feedback)
Prepares the algorithm to run using the specified parameters.
virtual QString groupId() const
Returns the unique ID of the group this algorithm belongs to.
virtual Qgis::ProcessingAlgorithmFlags flags() const
Returns the flags indicating how and when the algorithm operates and should be exposed to users.
#define SIP_FACTORY
Definition qgis_sip.h:83