From b7fb925178bd8c1f53a4b2e3eb154a1b87f57a24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20T=C5=AFma?= Date: Sat, 10 Nov 2018 00:17:00 +0100 Subject: [PATCH] Display labels overlapping between tiles (requires unique feature IDs in PBF data - OpenMapTiles >= v3.7) --- src/pbf.cpp | 6 ++++++ src/text.cpp | 10 +--------- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/src/pbf.cpp b/src/pbf.cpp index 6be9c0f..4c4008a 100644 --- a/src/pbf.cpp +++ b/src/pbf.cpp @@ -69,6 +69,11 @@ private: const vector_tile::Tile_Feature *_data; }; +bool cmp(const Feature &f1, const Feature &f2) +{ + return f1.data()->id() < f2.data()->id(); +} + class Layer { public: @@ -84,6 +89,7 @@ public: for (int i = 0; i < data->features_size(); i++) _features.append(Feature(&(data->features(i)), &keys, &values)); + qSort(_features.begin(), _features.end(), cmp); } const QList &features() const {return _features;} diff --git a/src/text.cpp b/src/text.cpp index b11cee3..e2389e7 100644 --- a/src/text.cpp +++ b/src/text.cpp @@ -139,18 +139,10 @@ void Text::addLabel(const QString &text, const QPointF &pos, const QFont &font, { if (text.isEmpty()) return; - if (!sceneRect().contains(pos)) - return; TextItem *ti = new TextItem(text, pos, font, maxTextWidth); - addItem(ti); - if (!sceneRect().contains(ti->sceneBoundingRect())) { - delete ti; - return; - } - ti->setPen(pen); - + addItem(ti); QList ci = collidingItems(ti); for (int i = 0; i < ci.size(); i++) ci[i]->setVisible(false);