From f220e176b64318a0f9f452878ccbf64e327c02c7 Mon Sep 17 00:00:00 2001 From: Michael Reichert Date: Mon, 25 Mar 2024 15:08:45 +0100 Subject: [PATCH] do not stop rendering if some tiles/layers of tiles are missing --- src/mbtiles_vector_featureset.cpp | 25 ++++++++++++++++--------- src/mbtiles_vector_featureset.hpp | 1 + 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/src/mbtiles_vector_featureset.cpp b/src/mbtiles_vector_featureset.cpp index 0e03069..3475398 100644 --- a/src/mbtiles_vector_featureset.cpp +++ b/src/mbtiles_vector_featureset.cpp @@ -53,23 +53,30 @@ bool mbtiles_vector_featureset::valid() const return vector_tile_.get() != nullptr; } +mapnik::feature_ptr mbtiles_vector_featureset::next_feature() +{ + mapnik::feature_ptr f = mapnik::feature_ptr(); + if (valid()) { + f = vector_tile_->next(); + } + return f; +} + mapnik::feature_ptr mbtiles_vector_featureset::next() { // If current tile is processed completely, go forward to the next tile. // else step forward to the next feature - mapnik::feature_ptr f = mapnik::feature_ptr(); - if (!valid()) - { - return f; - } - f = vector_tile_->next(); - if (f) - { + mapnik::feature_ptr f = next_feature(); + if (f) { return f; } while (next_tile() && open_tile() && valid()) { - return vector_tile_->next(); + f = next_feature(); + if (f) + { + return f; + } } return mapnik::feature_ptr(); } diff --git a/src/mbtiles_vector_featureset.hpp b/src/mbtiles_vector_featureset.hpp index 1ebef31..9a9b484 100644 --- a/src/mbtiles_vector_featureset.hpp +++ b/src/mbtiles_vector_featureset.hpp @@ -43,6 +43,7 @@ class mbtiles_vector_featureset : public mapnik::Featureset virtual ~mbtiles_vector_featureset(); mapnik::feature_ptr next(); private: + mapnik::feature_ptr next_feature(); bool valid() const; std::shared_ptr database_; mapnik::context_ptr context_;