From a323b0dcec65056f04d994bda8fd3ee475d1639f Mon Sep 17 00:00:00 2001 From: Asheem Mamoowala Date: Thu, 28 Sep 2017 10:21:19 -0700 Subject: [core] Split GeoJSONTileData and related classes into a separate header --- cmake/core-files.cmake | 1 + src/mbgl/tile/geojson_tile.cpp | 95 +------------------------------------ src/mbgl/tile/geojson_tile_data.hpp | 94 ++++++++++++++++++++++++++++++++++++ 3 files changed, 96 insertions(+), 94 deletions(-) create mode 100644 src/mbgl/tile/geojson_tile_data.hpp diff --git a/cmake/core-files.cmake b/cmake/core-files.cmake index 04f0f7116d..2eadc747d1 100644 --- a/cmake/core-files.cmake +++ b/cmake/core-files.cmake @@ -491,6 +491,7 @@ set(MBGL_CORE_FILES include/mbgl/tile/tile_id.hpp src/mbgl/tile/geojson_tile.cpp src/mbgl/tile/geojson_tile.hpp + src/mbgl/tile/geojson_tile_data.hpp src/mbgl/tile/geometry_tile.cpp src/mbgl/tile/geometry_tile.hpp src/mbgl/tile/geometry_tile_data.cpp diff --git a/src/mbgl/tile/geojson_tile.cpp b/src/mbgl/tile/geojson_tile.cpp index 5d8339d775..ee4989462c 100644 --- a/src/mbgl/tile/geojson_tile.cpp +++ b/src/mbgl/tile/geojson_tile.cpp @@ -1,104 +1,11 @@ #include -#include +#include #include #include #include -#include - -#include -#include namespace mbgl { -// Implements a simple in-memory Tile type that holds GeoJSON values. A GeoJSON tile can only have -// one layer, and it is always returned regardless of which layer is requested. - -class GeoJSONTileFeature : public GeometryTileFeature { -public: - const mapbox::geometry::feature& feature; - - GeoJSONTileFeature(const mapbox::geometry::feature& feature_) - : feature(feature_) { - } - - FeatureType getType() const override { - return apply_visitor(ToFeatureType(), feature.geometry); - } - - PropertyMap getProperties() const override { - return feature.properties; - } - - optional getID() const override { - return feature.id; - } - - GeometryCollection getGeometries() const override { - GeometryCollection geometry = apply_visitor(ToGeometryCollection(), feature.geometry); - - // https://github.com/mapbox/geojson-vt-cpp/issues/44 - if (getType() == FeatureType::Polygon) { - geometry = fixupPolygons(geometry); - } - - return geometry; - } - - optional getValue(const std::string& key) const override { - auto it = feature.properties.find(key); - if (it != feature.properties.end()) { - return optional(it->second); - } - return optional(); - } -}; - -class GeoJSONTileLayer : public GeometryTileLayer { -public: - GeoJSONTileLayer(std::shared_ptr> features_) - : features(std::move(features_)) { - } - - std::size_t featureCount() const override { - return features->size(); - } - - std::unique_ptr getFeature(std::size_t i) const override { - return std::make_unique((*features)[i]); - } - - std::string getName() const override { - return ""; - } - -private: - std::shared_ptr> features; -}; - -class GeoJSONTileData : public GeometryTileData { -public: - GeoJSONTileData(mapbox::geometry::feature_collection features_) - : features(std::make_shared>( - std::move(features_))) { - } - - GeoJSONTileData(std::shared_ptr> features_) - : features(std::move(features_)) { - } - - std::unique_ptr clone() const override { - return std::make_unique(features); - } - - std::unique_ptr getLayer(const std::string&) const override { - return std::make_unique(features); - } - - -private: - std::shared_ptr> features; -}; - GeoJSONTile::GeoJSONTile(const OverscaledTileID& overscaledTileID, std::string sourceID_, const TileParameters& parameters, diff --git a/src/mbgl/tile/geojson_tile_data.hpp b/src/mbgl/tile/geojson_tile_data.hpp new file mode 100644 index 0000000000..3402c2a009 --- /dev/null +++ b/src/mbgl/tile/geojson_tile_data.hpp @@ -0,0 +1,94 @@ +#include + +namespace mbgl { + +// Implements a simple in-memory Tile type that holds GeoJSON values. A GeoJSON tile can only have +// one layer, and it is always returned regardless of which layer is requested. + +class GeoJSONTileFeature : public GeometryTileFeature { +public: + const mapbox::geometry::feature& feature; + + GeoJSONTileFeature(const mapbox::geometry::feature& feature_) + : feature(feature_) { + } + + FeatureType getType() const override { + return apply_visitor(ToFeatureType(), feature.geometry); + } + + PropertyMap getProperties() const override { + return feature.properties; + } + + optional getID() const override { + return feature.id; + } + + GeometryCollection getGeometries() const override { + GeometryCollection geometry = apply_visitor(ToGeometryCollection(), feature.geometry); + + // https://github.com/mapbox/geojson-vt-cpp/issues/44 + if (getType() == FeatureType::Polygon) { + geometry = fixupPolygons(geometry); + } + + return geometry; + } + + optional getValue(const std::string& key) const override { + auto it = feature.properties.find(key); + if (it != feature.properties.end()) { + return optional(it->second); + } + return optional(); + } +}; + +class GeoJSONTileLayer : public GeometryTileLayer { +public: + GeoJSONTileLayer(std::shared_ptr> features_) + : features(std::move(features_)) { + } + + std::size_t featureCount() const override { + return features->size(); + } + + std::unique_ptr getFeature(std::size_t i) const override { + return std::make_unique((*features)[i]); + } + + std::string getName() const override { + return ""; + } + +private: + std::shared_ptr> features; +}; + +class GeoJSONTileData : public GeometryTileData { +public: + GeoJSONTileData(mapbox::geometry::feature_collection features_) + : features(std::make_shared>( + std::move(features_))) { + } + + GeoJSONTileData(std::shared_ptr> features_) + : features(std::move(features_)) { + } + + std::unique_ptr clone() const override { + return std::make_unique(features); + } + + std::unique_ptr getLayer(const std::string&) const override { + return std::make_unique(features); + } + + +private: + std::shared_ptr> features; +}; + +} // namespace mbgl -- cgit v1.2.1