From c8391729c7af8edc142f0319ccffe2720cfb6c18 Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Fri, 29 Apr 2016 18:28:34 -0700 Subject: [core] Use geometry.hpp feature type --- src/mbgl/geometry/feature_index.cpp | 52 +++++++------------------------------ src/mbgl/geometry/feature_index.hpp | 5 ++-- src/mbgl/map/map.cpp | 4 +-- src/mbgl/source/source.cpp | 4 +-- src/mbgl/source/source.hpp | 3 ++- src/mbgl/style/filter.hpp | 2 +- src/mbgl/style/filter_evaluator.hpp | 10 +++++++ src/mbgl/style/style.cpp | 7 +++-- src/mbgl/style/style.hpp | 3 ++- src/mbgl/tile/geometry_tile.hpp | 6 ++--- src/mbgl/tile/tile_data.cpp | 2 +- src/mbgl/tile/tile_data.hpp | 3 ++- src/mbgl/tile/vector_tile.cpp | 2 +- src/mbgl/tile/vector_tile.hpp | 4 +-- src/mbgl/tile/vector_tile_data.cpp | 2 +- src/mbgl/tile/vector_tile_data.hpp | 3 ++- src/mbgl/util/value.hpp | 9 ------- 17 files changed, 47 insertions(+), 74 deletions(-) delete mode 100644 src/mbgl/util/value.hpp (limited to 'src') diff --git a/src/mbgl/geometry/feature_index.cpp b/src/mbgl/geometry/feature_index.cpp index d6e19c1932..3e345fe817 100644 --- a/src/mbgl/geometry/feature_index.cpp +++ b/src/mbgl/geometry/feature_index.cpp @@ -5,8 +5,6 @@ #include #include #include -#include -#include #include #include @@ -61,7 +59,7 @@ bool topDownSymbols(const IndexedSubfeature& a, const IndexedSubfeature& b) { } void FeatureIndex::query( - std::unordered_map>& result, + std::unordered_map>& result, const GeometryCollection& queryGeometry, const float bearing, const double tileSize, @@ -116,7 +114,7 @@ void FeatureIndex::query( } void FeatureIndex::addFeature( - std::unordered_map>& result, + std::unordered_map>& result, const IndexedSubfeature& indexedFeature, const GeometryCollection& queryGeometry, const optional>& filterLayerIDs, @@ -131,8 +129,8 @@ void FeatureIndex::addFeature( auto sourceLayer = geometryTile.getLayer(indexedFeature.sourceLayerName); assert(sourceLayer); - auto feature = sourceLayer->getFeature(indexedFeature.index); - assert(feature); + auto geometryTileFeature = sourceLayer->getFeature(indexedFeature.index); + assert(geometryTileFeature); for (auto& layerID : layerIDs) { @@ -142,49 +140,19 @@ void FeatureIndex::addFeature( if (!styleLayer) continue; if (!styleLayer->is()) { - auto geometries = getGeometries(*feature); + auto geometries = getGeometries(*geometryTileFeature); if (!styleLayer->queryIntersectsGeometry(queryGeometry, geometries, bearing, pixelsToTileUnits)) continue; } - auto& layerResult = result[layerID]; + Feature feature { mapbox::geometry::point() }; + feature.properties = geometryTileFeature->getProperties(); - auto properties = feature->getProperties(); - rapidjson::StringBuffer buffer; - buffer.Clear(); - rapidjson::Writer writer(buffer); - - writer.StartObject(); - writer.Key("type"); - writer.String("Feature"); - auto id = feature->getID(); + optional id = geometryTileFeature->getID(); if (id) { - writer.Key("id"); - writer.Double(feature->getID()); - } - writer.Key("properties"); - writer.StartObject(); - for (auto& prop : properties) { - std::string key = prop.first; - Value& value = prop.second; - - writer.Key(key.c_str()); - - if (value.is()) { - writer.String(value.get().c_str()); - } else if (value.is()) { - writer.Bool(value.get()); - } else if (value.is()) { - writer.Int64(value.get()); - } else if (value.is()) { - writer.Uint64(value.get()); - } else if (value.is()) { - writer.Double(value.get()); - } + feature.id = Value(*id); } - writer.EndObject(); - writer.EndObject(); - layerResult.push_back(buffer.GetString()); + result[layerID].push_back(std::move(feature)); } } diff --git a/src/mbgl/geometry/feature_index.hpp b/src/mbgl/geometry/feature_index.hpp index 0b520a841a..5d78df2138 100644 --- a/src/mbgl/geometry/feature_index.hpp +++ b/src/mbgl/geometry/feature_index.hpp @@ -3,6 +3,7 @@ #include #include +#include #include #include @@ -29,7 +30,7 @@ class FeatureIndex { void insert(const GeometryCollection&, std::size_t index, const std::string& sourceLayerName, const std::string& bucketName); void query( - std::unordered_map>& result, + std::unordered_map>& result, const GeometryCollection& queryGeometry, const float bearing, const double tileSize, @@ -52,7 +53,7 @@ class FeatureIndex { private: void addFeature( - std::unordered_map>& result, + std::unordered_map>& result, const IndexedSubfeature &indexedFeature, const GeometryCollection& queryGeometry, const optional>& filterLayerIDs, diff --git a/src/mbgl/map/map.cpp b/src/mbgl/map/map.cpp index 38198d42ec..2a0246b654 100644 --- a/src/mbgl/map/map.cpp +++ b/src/mbgl/map/map.cpp @@ -722,14 +722,14 @@ std::vector pointsToCoordinates(const std::vector Map::queryRenderedFeatures(const ScreenCoordinate& point, const optional>& layerIDs) { +std::vector Map::queryRenderedFeatures(const ScreenCoordinate& point, const optional>& layerIDs) { if (!impl->style) return {}; auto queryGeometry = pointsToCoordinates({ point }, impl->transform.getState()); return impl->style->queryRenderedFeatures(queryGeometry, impl->transform.getZoom(), impl->transform.getAngle(), layerIDs); } -std::vector Map::queryRenderedFeatures(const std::array& box, const optional>& layerIDs) { +std::vector Map::queryRenderedFeatures(const std::array& box, const optional>& layerIDs) { if (!impl->style) return {}; std::vector queryPoints { diff --git a/src/mbgl/source/source.cpp b/src/mbgl/source/source.cpp index 18de7bc093..78bffbb9b3 100644 --- a/src/mbgl/source/source.cpp +++ b/src/mbgl/source/source.cpp @@ -498,13 +498,13 @@ struct TileQuery { double scale; }; -std::unordered_map> Source::queryRenderedFeatures( +std::unordered_map> Source::queryRenderedFeatures( const std::vector& queryGeometry, const double zoom, const double bearing, const optional>& layerIDs) { - std::unordered_map> result; + std::unordered_map> result; double minX = std::numeric_limits::infinity(); double minY = std::numeric_limits::infinity(); diff --git a/src/mbgl/source/source.hpp b/src/mbgl/source/source.hpp index a4b6961245..cc579e11e7 100644 --- a/src/mbgl/source/source.hpp +++ b/src/mbgl/source/source.hpp @@ -7,6 +7,7 @@ #include #include +#include #include #include @@ -72,7 +73,7 @@ public: std::forward_list getLoadedTiles() const; const std::vector& getTiles() const; - std::unordered_map> queryRenderedFeatures( + std::unordered_map> queryRenderedFeatures( const std::vector& queryGeometry, const double zoom, const double bearing, diff --git a/src/mbgl/style/filter.hpp b/src/mbgl/style/filter.hpp index 85878543f8..0a1dcbd17a 100644 --- a/src/mbgl/style/filter.hpp +++ b/src/mbgl/style/filter.hpp @@ -1,7 +1,7 @@ #pragma once #include -#include +#include #include #include diff --git a/src/mbgl/style/filter_evaluator.hpp b/src/mbgl/style/filter_evaluator.hpp index 27402ac211..0f3ee2a424 100644 --- a/src/mbgl/style/filter_evaluator.hpp +++ b/src/mbgl/style/filter_evaluator.hpp @@ -121,6 +121,16 @@ private: !std::is_arithmetic::value || std::is_same::value, bool> { return false; } + + bool operator()(const std::vector&, + const std::vector&) const { + return false; + } + + bool operator()(const std::unordered_map&, + const std::unordered_map&) const { + return false; + } }; template diff --git a/src/mbgl/style/style.cpp b/src/mbgl/style/style.cpp index 4d515b4e60..fc0f1de9c8 100644 --- a/src/mbgl/style/style.cpp +++ b/src/mbgl/style/style.cpp @@ -314,18 +314,17 @@ RenderData Style::getRenderData() const { return result; } -std::vector Style::queryRenderedFeatures( +std::vector Style::queryRenderedFeatures( const std::vector& queryGeometry, const double zoom, const double bearing, const optional>& layerIDs) { - std::vector>> sourceResults; + std::vector>> sourceResults; for (const auto& source : sources) { sourceResults.emplace_back(source->queryRenderedFeatures(queryGeometry, zoom, bearing, layerIDs)); } - - std::vector features; + std::vector features; auto featuresInserter = std::back_inserter(features); // Combine all results based on the style layer order. diff --git a/src/mbgl/style/style.hpp b/src/mbgl/style/style.hpp index 5dac4d4790..bfeebc28d5 100644 --- a/src/mbgl/style/style.hpp +++ b/src/mbgl/style/style.hpp @@ -13,6 +13,7 @@ #include #include #include +#include #include #include @@ -108,7 +109,7 @@ public: RenderData getRenderData() const; - std::vector queryRenderedFeatures( + std::vector queryRenderedFeatures( const std::vector& queryGeometry, const double zoom, const double bearing, diff --git a/src/mbgl/tile/geometry_tile.hpp b/src/mbgl/tile/geometry_tile.hpp index 57d8eab1cc..0bcb92b47b 100644 --- a/src/mbgl/tile/geometry_tile.hpp +++ b/src/mbgl/tile/geometry_tile.hpp @@ -1,7 +1,7 @@ #ifndef MBGL_MAP_GEOMETRY_TILE #define MBGL_MAP_GEOMETRY_TILE -#include +#include #include #include #include @@ -39,8 +39,8 @@ public: virtual ~GeometryTileFeature() = default; virtual FeatureType getType() const = 0; virtual optional getValue(const std::string& key) const = 0; - virtual std::unordered_map getProperties() const { return std::unordered_map{}; }; - virtual uint64_t getID() const { return 0; } + virtual Feature::property_map getProperties() const { return Feature::property_map(); } + virtual optional getID() const { return {}; } virtual GeometryCollection getGeometries() const = 0; virtual uint32_t getExtent() const { return defaultExtent; } }; diff --git a/src/mbgl/tile/tile_data.cpp b/src/mbgl/tile/tile_data.cpp index cb12e301f2..49a426b466 100644 --- a/src/mbgl/tile/tile_data.cpp +++ b/src/mbgl/tile/tile_data.cpp @@ -30,7 +30,7 @@ void TileData::dumpDebugLogs() const { } void TileData::queryRenderedFeatures( - std::unordered_map>&, + std::unordered_map>&, const GeometryCollection&, const double, const double, diff --git a/src/mbgl/tile/tile_data.hpp b/src/mbgl/tile/tile_data.hpp index 26c0032e35..338f246da0 100644 --- a/src/mbgl/tile/tile_data.hpp +++ b/src/mbgl/tile/tile_data.hpp @@ -4,6 +4,7 @@ #include #include #include +#include #include #include #include @@ -85,7 +86,7 @@ public: virtual void redoPlacement(const std::function&) {} virtual void queryRenderedFeatures( - std::unordered_map>& result, + std::unordered_map>& result, const GeometryCollection& queryGeometry, const double bearing, const double tileSize, diff --git a/src/mbgl/tile/vector_tile.cpp b/src/mbgl/tile/vector_tile.cpp index af30fa9986..aedb703898 100644 --- a/src/mbgl/tile/vector_tile.cpp +++ b/src/mbgl/tile/vector_tile.cpp @@ -102,7 +102,7 @@ std::unordered_map VectorTileFeature::getProperties() const { return properties; } -uint64_t VectorTileFeature::getID() const { +optional VectorTileFeature::getID() const { return id; } diff --git a/src/mbgl/tile/vector_tile.hpp b/src/mbgl/tile/vector_tile.hpp index 441d6827ac..153d7dcef4 100644 --- a/src/mbgl/tile/vector_tile.hpp +++ b/src/mbgl/tile/vector_tile.hpp @@ -23,13 +23,13 @@ public: FeatureType getType() const override { return type; } optional getValue(const std::string&) const override; std::unordered_map getProperties() const override; - uint64_t getID() const override; + optional getID() const override; GeometryCollection getGeometries() const override; uint32_t getExtent() const override; private: const VectorTileLayer& layer; - uint64_t id = 0; + optional id; FeatureType type = FeatureType::Unknown; packed_iter_type tags_iter; packed_iter_type geometry_iter; diff --git a/src/mbgl/tile/vector_tile_data.cpp b/src/mbgl/tile/vector_tile_data.cpp index c71b2b733d..1840dca9fe 100644 --- a/src/mbgl/tile/vector_tile_data.cpp +++ b/src/mbgl/tile/vector_tile_data.cpp @@ -191,7 +191,7 @@ void VectorTileData::redoPlacement(const std::function& callback) { } void VectorTileData::queryRenderedFeatures( - std::unordered_map>& result, + std::unordered_map>& result, const GeometryCollection& queryGeometry, const double bearing, const double tileSize, diff --git a/src/mbgl/tile/vector_tile_data.hpp b/src/mbgl/tile/vector_tile_data.hpp index 303fe343fe..52cef71d1b 100644 --- a/src/mbgl/tile/vector_tile_data.hpp +++ b/src/mbgl/tile/vector_tile_data.hpp @@ -4,6 +4,7 @@ #include #include #include +#include #include #include @@ -37,7 +38,7 @@ public: bool hasData() const override; void queryRenderedFeatures( - std::unordered_map>& result, + std::unordered_map>& result, const GeometryCollection& queryGeometry, const double bearing, const double tileSize, diff --git a/src/mbgl/util/value.hpp b/src/mbgl/util/value.hpp deleted file mode 100644 index 78507c7f25..0000000000 --- a/src/mbgl/util/value.hpp +++ /dev/null @@ -1,9 +0,0 @@ -#pragma once - -#include - -namespace mbgl { - -typedef variant Value; - -} // namespace mbgl -- cgit v1.2.1