From f07f59207825206172ac8aa46a74ea797d287ce7 Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Thu, 25 Aug 2016 17:54:02 -0700 Subject: [PATCH] [core] Simplify GeoJSONTile constructor --- .../style/sources/geojson_source_impl.cpp | 10 +++- src/mbgl/tile/geojson_tile.cpp | 57 +++++++------------ src/mbgl/tile/geojson_tile.hpp | 20 +------ 3 files changed, 32 insertions(+), 55 deletions(-) diff --git a/src/mbgl/style/sources/geojson_source_impl.cpp b/src/mbgl/style/sources/geojson_source_impl.cpp index 8dc0d9bb8..1e0227081 100644 --- a/src/mbgl/style/sources/geojson_source_impl.cpp +++ b/src/mbgl/style/sources/geojson_source_impl.cpp @@ -128,11 +128,17 @@ std::unique_ptr GeoJSONSource::Impl::createTile(const OverscaledTileID& ti assert(loaded); if (geoJSONOrSupercluster.is()) { return std::make_unique(tileID, base.getID(), parameters, - *geoJSONOrSupercluster.get()); + geoJSONOrSupercluster.get()->getTile( + tileID.canonical.z, + tileID.canonical.x, + tileID.canonical.y).features); } else { assert(geoJSONOrSupercluster.is()); return std::make_unique(tileID, base.getID(), parameters, - *geoJSONOrSupercluster.get()); + geoJSONOrSupercluster.get()->getTile( + tileID.canonical.z, + tileID.canonical.x, + tileID.canonical.y)); } } diff --git a/src/mbgl/tile/geojson_tile.cpp b/src/mbgl/tile/geojson_tile.cpp index a510b74da..1aff95916 100644 --- a/src/mbgl/tile/geojson_tile.cpp +++ b/src/mbgl/tile/geojson_tile.cpp @@ -63,51 +63,38 @@ class GeoJSONTileData : public GeometryTileData { public: std::shared_ptr layer = std::make_shared(); + GeoJSONTileData(const mapbox::geometry::feature_collection& features) { + for (auto& feature : features) { + const FeatureType featureType = apply_visitor(ToFeatureType(), feature.geometry); + + if (featureType == FeatureType::Unknown) { + continue; + } + + GeometryCollection geometry = apply_visitor(ToGeometryCollection(), feature.geometry); + + // https://github.com/mapbox/geojson-vt-cpp/issues/44 + if (featureType == FeatureType::Polygon) { + geometry = fixupPolygons(geometry); + } + + layer->features.emplace_back(std::make_shared( + featureType, std::move(geometry), PropertyMap(feature.properties))); + } + } + util::ptr getLayer(const std::string&) const override { // We're ignoring the layer name because GeoJSON tiles only have one layer. return layer; } }; -// Converts the geojsonvt::Tile to a a GeoJSONTile. They have a differing internal structure. -std::unique_ptr convertTile(const mapbox::geometry::feature_collection& features) { - auto result = std::make_unique(); - - for (auto& feature : features) { - const FeatureType featureType = apply_visitor(ToFeatureType(), feature.geometry); - - if (featureType == FeatureType::Unknown) { - continue; - } - - GeometryCollection geometry = apply_visitor(ToGeometryCollection(), feature.geometry); - - // https://github.com/mapbox/geojson-vt-cpp/issues/44 - if (featureType == FeatureType::Polygon) { - geometry = fixupPolygons(geometry); - } - - result->layer->features.emplace_back(std::make_shared( - featureType, std::move(geometry), PropertyMap(feature.properties))); - } - - return result; -} - GeoJSONTile::GeoJSONTile(const OverscaledTileID& overscaledTileID, std::string sourceID_, const style::UpdateParameters& parameters, - mapbox::geojsonvt::GeoJSONVT& geojsonvt) + const mapbox::geometry::feature_collection& features) : GeometryTile(overscaledTileID, sourceID_, parameters.style, parameters.mode) { - setData(convertTile(geojsonvt.getTile(id.canonical.z, id.canonical.x, id.canonical.y).features)); -} - -GeoJSONTile::GeoJSONTile(const OverscaledTileID& overscaledTileID, - std::string sourceID_, - const style::UpdateParameters& parameters, - mapbox::supercluster::Supercluster& supercluster) - : GeometryTile(overscaledTileID, sourceID_, parameters.style, parameters.mode) { - setData(convertTile(supercluster.getTile(id.canonical.z, id.canonical.x, id.canonical.y))); + setData(std::make_unique(features)); } void GeoJSONTile::setNecessity(Necessity) {} diff --git a/src/mbgl/tile/geojson_tile.hpp b/src/mbgl/tile/geojson_tile.hpp index 422101b76..be5a50c7a 100644 --- a/src/mbgl/tile/geojson_tile.hpp +++ b/src/mbgl/tile/geojson_tile.hpp @@ -1,18 +1,7 @@ #pragma once #include - -namespace mapbox { - -namespace geojsonvt { -class GeoJSONVT; -} // namespace geojsonvt - -namespace supercluster { -class Supercluster; -} // namespace supercluster - -} // namespace mapbox +#include namespace mbgl { @@ -25,12 +14,7 @@ public: GeoJSONTile(const OverscaledTileID&, std::string sourceID, const style::UpdateParameters&, - mapbox::geojsonvt::GeoJSONVT&); - - GeoJSONTile(const OverscaledTileID&, - std::string sourceID, - const style::UpdateParameters&, - mapbox::supercluster::Supercluster&); + const mapbox::geometry::feature_collection&); void setNecessity(Necessity) final; };