From b3a88a247a1c6e8fea34cdc3d15c8f94834f5017 Mon Sep 17 00:00:00 2001 From: Patrik Sylve Date: Thu, 30 Jan 2025 16:45:05 +0100 Subject: [PATCH] Register vector tile label features first when all tiles are fetched --- src/core/vectortile/qgsvectortilelayerrenderer.cpp | 12 +++++++++++- src/core/vectortile/qgsvectortilelayerrenderer.h | 3 +++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/core/vectortile/qgsvectortilelayerrenderer.cpp b/src/core/vectortile/qgsvectortilelayerrenderer.cpp index 3e854dd931e5..797e960615b4 100644 --- a/src/core/vectortile/qgsvectortilelayerrenderer.cpp +++ b/src/core/vectortile/qgsvectortilelayerrenderer.cpp @@ -224,6 +224,15 @@ bool QgsVectorTileLayerRenderer::render() mErrors.append( asyncLoader->error() ); } + // Register labels features when all tiles are fetched to ensure consistent labeling + if ( mLabelProvider ) + { + for ( const auto &tile : mTileDataMap ) + { + mLabelProvider->registerTileFeatures( tile, ctx ); + } + } + if ( ctx.flags() & Qgis::RenderContextFlag::DrawSelection ) mRenderer->renderSelectedFeatures( mSelectedFeatures, ctx ); @@ -309,8 +318,9 @@ void QgsVectorTileLayerRenderer::decodeAndDrawTile( const QgsVectorTileRawData & mTotalDrawTime += tDraw.elapsed(); } + // Store tile for later use if ( mLabelProvider ) - mLabelProvider->registerTileFeatures( tile, ctx ); + mTileDataMap.insert( tile.id().toString(), tile ); if ( mDrawTileBoundaries ) { diff --git a/src/core/vectortile/qgsvectortilelayerrenderer.h b/src/core/vectortile/qgsvectortilelayerrenderer.h index 127f55d860a7..e024d636b418 100644 --- a/src/core/vectortile/qgsvectortilelayerrenderer.h +++ b/src/core/vectortile/qgsvectortilelayerrenderer.h @@ -71,6 +71,9 @@ class QgsVectorTileLayerRenderer : public QgsMapLayerRenderer */ QgsVectorTileLabelProvider *mLabelProvider = nullptr; + // Decoded tile data + QMap mTileDataMap; + //! Whether to draw boundaries of tiles (useful for debugging) bool mDrawTileBoundaries = false;