diff options
author | Tobrun <tobrun.van.nuland@gmail.com> | 2016-09-20 20:50:27 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-09-20 20:50:27 +0200 |
commit | 7df9a21f415aa269e7ae435d1500f4a3c7d607e1 (patch) | |
tree | 9e383dbb2a7c92dd3d5e983c68795f04252025f3 /src/mbgl | |
parent | 3755d48441de190a0e94b347ec3ba8e2d54a7285 (diff) | |
download | qtlocation-mapboxgl-7df9a21f415aa269e7ae435d1500f4a3c7d607e1.tar.gz |
[core] - mutable geojson sources. make tiles protected for geojson_source_impl (#6347)
Diffstat (limited to 'src/mbgl')
-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 | ||||
-rw-r--r-- | src/mbgl/tile/geojson_tile.cpp | 6 | ||||
-rw-r--r-- | src/mbgl/tile/geojson_tile.hpp | 5 |
5 files changed, 31 insertions, 19 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; diff --git a/src/mbgl/tile/geojson_tile.cpp b/src/mbgl/tile/geojson_tile.cpp index 2b302e14ec..61437b79b1 100644 --- a/src/mbgl/tile/geojson_tile.cpp +++ b/src/mbgl/tile/geojson_tile.cpp @@ -77,9 +77,11 @@ public: GeoJSONTile::GeoJSONTile(const OverscaledTileID& overscaledTileID, std::string sourceID_, - const style::UpdateParameters& parameters, - const mapbox::geometry::feature_collection<int16_t>& features) + const style::UpdateParameters& parameters) : GeometryTile(overscaledTileID, sourceID_, parameters) { +} + +void GeoJSONTile::updateData(const mapbox::geometry::feature_collection<int16_t>& features) { setData(std::make_unique<GeoJSONTileData>(features)); } diff --git a/src/mbgl/tile/geojson_tile.hpp b/src/mbgl/tile/geojson_tile.hpp index be5a50c7a4..2880408736 100644 --- a/src/mbgl/tile/geojson_tile.hpp +++ b/src/mbgl/tile/geojson_tile.hpp @@ -13,9 +13,10 @@ class GeoJSONTile : public GeometryTile { public: GeoJSONTile(const OverscaledTileID&, std::string sourceID, - const style::UpdateParameters&, - const mapbox::geometry::feature_collection<int16_t>&); + const style::UpdateParameters&); + void updateData(const mapbox::geometry::feature_collection<int16_t>&); + void setNecessity(Necessity) final; }; |