18#ifndef QGSALGORITHMXYZTILES_H
19#define QGSALGORITHMXYZTILES_H
40using namespace Qt::StringLiterals;
45template<
typename T>
class PendingTilesToWriteQueue;
49 Tile(
const int x,
const int y,
const int z )
64 void addTile(
const int row,
const int col, Tile tileToAdd,
const QgsRectangle &extent );
66 QMap<QPair<int, int>, Tile> tiles;
78 QString
group()
const override;
79 QString
groupId()
const override;
86 void createCommonParameters();
91 void createTileMatrixParameters();
93 bool prepareAlgorithm(
const QVariantMap ¶meters, QgsProcessingContext &context, QgsProcessingFeedback *feedback )
override;
95 void checkLayersUsagePolicy( QgsProcessingFeedback *feedback );
97 void startJobs( QgsProcessingFeedback *feedback );
98 void checkPipelineFinished( QgsProcessingFeedback *feedback );
99 virtual void processMetaTile(
const MetaTile &metaTile,
const QImage &renderedImg, QgsProcessingFeedback *feedback ) = 0;
101 std::optional<QgsMapSettings> mapSettingsForTile(
const MetaTile &metaTile )
const;
103 static constexpr double MERC_MAX = 20037508.342789244;
105 QColor mBackgroundColor;
108 QList<QgsTileExtentMaxZoomRegion> mMaxZoomRegions;
109 int mMaxZoomLimitIncludingOverrides = 0;
112 bool mAntialias =
true;
113 int mJpgQuality = 75;
114 int mMetaTileSize = 4;
115 int mThreadsNumber = 1;
116 int mTileWidth = 256;
117 int mTileHeight = 256;
118 bool mSkipEmptyTiles =
false;
119 QgsExpressionContext mExpressionContext;
121 QList<QgsMapLayer *> mLayers;
122 QgsRectangle mWgs84Extent;
123 QObjectUniquePtr<QObject> mJobOwner =
nullptr;
125 QgsCoordinateReferenceSystem mTargetCrs = QgsCoordinateReferenceSystem( u
"EPSG:3857"_s );
126 QgsTileMatrix mZ0matrix;
127 QgsRectangle mTileGenerationRegion;
129 long long mTotalMetaTiles = 0;
130 std::atomic<long long> mProcessedMetaTiles { 0 };
131 std::atomic<long long> mTilesWritten { 0 };
132 std::atomic<long long> mEmptyTiles { 0 };
133 std::atomic<int> mActivePostProcessingTasks { 0 };
134 QgsCoordinateTransformContext mTransformContext;
136 QPointer<QEventLoop> mEventLoop;
137 QList<MetaTile> mMetaTiles;
138 QMap<QgsMapRendererSequentialJob *, MetaTile> mRendererJobs;
140 std::unique_ptr<QThreadPool> mPostProcessingPool;
147class QgsXyzTilesDirectoryAlgorithm :
public QgsXyzTilesBaseAlgorithm
150 QgsXyzTilesDirectoryAlgorithm() =
default;
151 void initAlgorithm(
const QVariantMap &configuration = QVariantMap() )
override;
152 QString name()
const override;
153 QString displayName()
const override;
154 QStringList tags()
const override;
155 QString shortHelpString()
const override;
156 QString shortDescription()
const override;
157 QgsXyzTilesDirectoryAlgorithm *createInstance() const override
SIP_FACTORY;
160 QVariantMap processAlgorithm( const QVariantMap ¶meters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override;
162 void processMetaTile( const MetaTile &metaTile, const QImage &renderedImg, QgsProcessingFeedback *feedback ) override;
167 void doExport( QgsProcessingFeedback *feedback );
173class QgsXyzTilesMbtilesAlgorithm : public QgsXyzTilesBaseAlgorithm
176 QgsXyzTilesMbtilesAlgorithm() =
default;
177 void initAlgorithm(
const QVariantMap &configuration = QVariantMap() )
override;
178 QString name()
const override;
179 QString displayName()
const override;
180 QStringList tags()
const override;
181 QString shortDescription()
const override;
182 QString shortHelpString()
const override;
183 QgsXyzTilesMbtilesAlgorithm *createInstance() const override
SIP_FACTORY;
186 QVariantMap processAlgorithm( const QVariantMap ¶meters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override;
187 void processMetaTile( const MetaTile &metaTile, const QImage &renderedImg, QgsProcessingFeedback *feedback ) override;
190 std::unique_ptr<QgsMbTiles> mMbtilesWriter;
191 PendingTilesToWriteQueue<QgsMbTiles::TileData> *mWriteQueue =
nullptr;
192 void doExport( QgsProcessingFeedback *feedback );
198class QgsXyzTilesGpkgAlgorithm : public QgsXyzTilesBaseAlgorithm
201 QgsXyzTilesGpkgAlgorithm() =
default;
202 void initAlgorithm(
const QVariantMap &configuration = QVariantMap() )
override;
203 QString name()
const override;
204 QString displayName()
const override;
205 QStringList tags()
const override;
206 QString shortDescription()
const override;
207 QString shortHelpString()
const override;
208 QgsXyzTilesGpkgAlgorithm *createInstance() const override
SIP_FACTORY;
211 QVariantMap processAlgorithm( const QVariantMap ¶meters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override;
212 void processMetaTile( const MetaTile &metaTile, const QImage &renderedImg, QgsProcessingFeedback *feedback ) override;
215 std::unique_ptr<QgsGeoPackageTiles> mGpkgWriter;
216 PendingTilesToWriteQueue<QgsGeoPackageTiles::TileData> *mWriteQueue =
nullptr;
217 void doExport( QgsProcessingFeedback *feedback );
QFlags< ProcessingAlgorithmFlag > ProcessingAlgorithmFlags
Flags indicating how and when an algorithm operates and should be exposed to users.
ScaleCalculationMethod
Scale calculation logic.
@ HorizontalMiddle
Calculate horizontally, across midle of map.
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 ¶meters, 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.