diff options
Diffstat (limited to 'src/mbgl/style')
-rw-r--r-- | src/mbgl/style/source_impl.hpp | 2 | ||||
-rw-r--r-- | src/mbgl/style/sources/geojson_source_impl.cpp | 35 | ||||
-rw-r--r-- | src/mbgl/style/sources/geojson_source_impl.hpp | 2 |
3 files changed, 24 insertions, 15 deletions
diff --git a/src/mbgl/style/source_impl.hpp b/src/mbgl/style/source_impl.hpp index 0de3760fc3..c7ed36b3c2 100644 --- a/src/mbgl/style/source_impl.hpp +++ b/src/mbgl/style/source_impl.hpp @@ -83,6 +83,7 @@ protected: Source& base; SourceObserver* observer = nullptr; + std::map<OverscaledTileID, std::unique_ptr<Tile>> tiles; private: // TileObserver implementation. @@ -93,7 +94,6 @@ private: virtual Range<uint8_t> getZoomRange() = 0; virtual std::unique_ptr<Tile> createTile(const OverscaledTileID&, const UpdateParameters&) = 0; - std::map<OverscaledTileID, std::unique_ptr<Tile>> tiles; std::map<UnwrappedTileID, RenderTile> renderTiles; TileCache cache; }; diff --git a/src/mbgl/style/sources/geojson_source_impl.cpp b/src/mbgl/style/sources/geojson_source_impl.cpp index 032576b47e..5b7ba4fc77 100644 --- a/src/mbgl/style/sources/geojson_source_impl.cpp +++ b/src/mbgl/style/sources/geojson_source_impl.cpp @@ -65,6 +65,24 @@ void GeoJSONSource::Impl::setGeoJSON(const GeoJSON& geoJSON) { geoJSONOrSupercluster = std::make_unique<mapbox::supercluster::Supercluster>(features, clusterOptions); } + + for (auto const &item : tiles) { + GeoJSONTile* geoJSONTile = static_cast<GeoJSONTile*>(item.second.get()); + setTileData(*geoJSONTile, geoJSONTile->id); + } +} + +void GeoJSONSource::Impl::setTileData(GeoJSONTile& tile, const OverscaledTileID& tileID) { + if (geoJSONOrSupercluster.is<GeoJSONVTPointer>()) { + tile.updateData(geoJSONOrSupercluster.get<GeoJSONVTPointer>()->getTile(tileID.canonical.z, + tileID.canonical.x, + tileID.canonical.y).features); + } else { + assert(geoJSONOrSupercluster.is<SuperclusterPointer>()); + tile.updateData(geoJSONOrSupercluster.get<SuperclusterPointer>()->getTile(tileID.canonical.z, + tileID.canonical.x, + tileID.canonical.y)); + } } void GeoJSONSource::Impl::loadDescription(FileSource& fileSource) { @@ -126,20 +144,9 @@ Range<uint8_t> GeoJSONSource::Impl::getZoomRange() { std::unique_ptr<Tile> GeoJSONSource::Impl::createTile(const OverscaledTileID& tileID, const UpdateParameters& parameters) { assert(loaded); - if (geoJSONOrSupercluster.is<GeoJSONVTPointer>()) { - return std::make_unique<GeoJSONTile>(tileID, base.getID(), parameters, - geoJSONOrSupercluster.get<GeoJSONVTPointer>()->getTile( - tileID.canonical.z, - tileID.canonical.x, - tileID.canonical.y).features); - } else { - assert(geoJSONOrSupercluster.is<SuperclusterPointer>()); - return std::make_unique<GeoJSONTile>(tileID, base.getID(), parameters, - geoJSONOrSupercluster.get<SuperclusterPointer>()->getTile( - tileID.canonical.z, - tileID.canonical.x, - tileID.canonical.y)); - } + auto tilePointer = std::make_unique<GeoJSONTile>(tileID, base.getID(), parameters); + setTileData(*tilePointer.get(), tileID); + return std::move(tilePointer); } } // namespace style diff --git a/src/mbgl/style/sources/geojson_source_impl.hpp b/src/mbgl/style/sources/geojson_source_impl.hpp index cf079e472c..9572355f2c 100644 --- a/src/mbgl/style/sources/geojson_source_impl.hpp +++ b/src/mbgl/style/sources/geojson_source_impl.hpp @@ -3,6 +3,7 @@ #include <mbgl/style/source_impl.hpp> #include <mbgl/style/sources/geojson_source.hpp> #include <mbgl/util/variant.hpp> +#include <mbgl/tile/geojson_tile.hpp> namespace mbgl { @@ -19,6 +20,7 @@ public: optional<std::string> getURL(); void setGeoJSON(const GeoJSON&); + void setTileData(GeoJSONTile&, const OverscaledTileID& tileID); void loadDescription(FileSource&) final; |