18#ifndef QGSALGORITHMXYZTILES_H
19#define QGSALGORITHMXYZTILES_H
33class PendingTilesToWriteQueue;
37 Tile(
const int x,
const int y,
const int z )
52 void addTile(
const int row,
const int col, Tile tileToAdd );
54 QgsRectangle extent()
const;
56 QMap<QPair<int, int>, Tile> tiles;
67 QString
group()
const override;
68 QString
groupId()
const override;
75 void createCommonParameters();
77 bool prepareAlgorithm(
const QVariantMap ¶meters, QgsProcessingContext &context, QgsProcessingFeedback *feedback )
override;
79 void checkLayersUsagePolicy( QgsProcessingFeedback *feedback );
81 void startJobs( QgsProcessingFeedback *feedback );
82 void checkPipelineFinished( QgsProcessingFeedback *feedback );
83 virtual void processMetaTile(
const MetaTile &metaTile,
const QImage &renderedImg, QgsProcessingFeedback *feedback ) = 0;
85 std::optional<QgsMapSettings> mapSettingsForTile(
const MetaTile &metaTile )
const;
88 QColor mBackgroundColor;
92 bool mAntialias =
true;
94 int mMetaTileSize = 4;
95 int mThreadsNumber = 1;
97 int mTileHeight = 256;
98 bool mSkipEmptyTiles =
false;
99 QgsExpressionContext mExpressionContext;
101 QList<QgsMapLayer *> mLayers;
102 QgsRectangle mWgs84Extent;
103 QObjectUniquePtr<QObject> mJobOwner =
nullptr;
104 std::unique_ptr<QThreadPool> mPostProcessingPool;
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;
113 QPointer<QEventLoop> mEventLoop;
114 QList<MetaTile> mMetaTiles;
115 QMap<QgsMapRendererSequentialJob *, MetaTile> mRendererJobs;
123class QgsXyzTilesDirectoryAlgorithm :
public QgsXyzTilesBaseAlgorithm
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;
135 QVariantMap processAlgorithm( const QVariantMap ¶meters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override;
137 void processMetaTile( const MetaTile &metaTile, const QImage &renderedImg, QgsProcessingFeedback *feedback ) override;
142 void doExport( QgsProcessingFeedback *feedback );
148class QgsXyzTilesMbtilesAlgorithm : public QgsXyzTilesBaseAlgorithm
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;
160 QVariantMap processAlgorithm( const QVariantMap ¶meters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override;
162 void processMetaTile( const MetaTile &metaTile, const QImage &renderedImg, QgsProcessingFeedback *feedback ) override;
165 std::unique_ptr<QgsMbTiles> mMbtilesWriter;
166 PendingTilesToWriteQueue *mWriteQueue =
nullptr;
167 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.