diff options
author | John Firebaugh <john.firebaugh@gmail.com> | 2016-04-29 18:28:34 -0700 |
---|---|---|
committer | John Firebaugh <john.firebaugh@gmail.com> | 2016-05-03 17:25:49 -0700 |
commit | c8391729c7af8edc142f0319ccffe2720cfb6c18 (patch) | |
tree | 7159629cb4f8c9b86ba39dd8c79b87e8f5cb432d /src | |
parent | 01b3eac52f810b61dc2d5f0ea7a2bfa229daa01f (diff) | |
download | qtlocation-mapboxgl-c8391729c7af8edc142f0319ccffe2720cfb6c18.tar.gz |
[core] Use geometry.hpp feature type
Diffstat (limited to 'src')
-rw-r--r-- | src/mbgl/geometry/feature_index.cpp | 52 | ||||
-rw-r--r-- | src/mbgl/geometry/feature_index.hpp | 5 | ||||
-rw-r--r-- | src/mbgl/map/map.cpp | 4 | ||||
-rw-r--r-- | src/mbgl/source/source.cpp | 4 | ||||
-rw-r--r-- | src/mbgl/source/source.hpp | 3 | ||||
-rw-r--r-- | src/mbgl/style/filter.hpp | 2 | ||||
-rw-r--r-- | src/mbgl/style/filter_evaluator.hpp | 10 | ||||
-rw-r--r-- | src/mbgl/style/style.cpp | 7 | ||||
-rw-r--r-- | src/mbgl/style/style.hpp | 3 | ||||
-rw-r--r-- | src/mbgl/tile/geometry_tile.hpp | 6 | ||||
-rw-r--r-- | src/mbgl/tile/tile_data.cpp | 2 | ||||
-rw-r--r-- | src/mbgl/tile/tile_data.hpp | 3 | ||||
-rw-r--r-- | src/mbgl/tile/vector_tile.cpp | 2 | ||||
-rw-r--r-- | src/mbgl/tile/vector_tile.hpp | 4 | ||||
-rw-r--r-- | src/mbgl/tile/vector_tile_data.cpp | 2 | ||||
-rw-r--r-- | src/mbgl/tile/vector_tile_data.hpp | 3 | ||||
-rw-r--r-- | src/mbgl/util/value.hpp | 9 |
17 files changed, 47 insertions, 74 deletions
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 <mbgl/layer/symbol_layer.hpp> #include <mbgl/util/get_geometries.hpp> #include <mbgl/text/collision_tile.hpp> -#include <mbgl/util/rapidjson.hpp> -#include <rapidjson/writer.h> #include <mbgl/util/constants.hpp> #include <cassert> @@ -61,7 +59,7 @@ bool topDownSymbols(const IndexedSubfeature& a, const IndexedSubfeature& b) { } void FeatureIndex::query( - std::unordered_map<std::string, std::vector<std::string>>& result, + std::unordered_map<std::string, std::vector<Feature>>& result, const GeometryCollection& queryGeometry, const float bearing, const double tileSize, @@ -116,7 +114,7 @@ void FeatureIndex::query( } void FeatureIndex::addFeature( - std::unordered_map<std::string, std::vector<std::string>>& result, + std::unordered_map<std::string, std::vector<Feature>>& result, const IndexedSubfeature& indexedFeature, const GeometryCollection& queryGeometry, const optional<std::vector<std::string>>& 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<SymbolLayer>()) { - 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<double>() }; + feature.properties = geometryTileFeature->getProperties(); - auto properties = feature->getProperties(); - rapidjson::StringBuffer buffer; - buffer.Clear(); - rapidjson::Writer<rapidjson::StringBuffer> writer(buffer); - - writer.StartObject(); - writer.Key("type"); - writer.String("Feature"); - auto id = feature->getID(); + optional<uint64_t> 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<std::string>()) { - writer.String(value.get<std::string>().c_str()); - } else if (value.is<bool>()) { - writer.Bool(value.get<bool>()); - } else if (value.is<int64_t>()) { - writer.Int64(value.get<int64_t>()); - } else if (value.is<uint64_t>()) { - writer.Uint64(value.get<uint64_t>()); - } else if (value.is<double>()) { - writer.Double(value.get<double>()); - } + 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 <mbgl/tile/geometry_tile.hpp> #include <mbgl/util/grid_index.hpp> +#include <mbgl/util/feature.hpp> #include <vector> #include <string> @@ -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<std::string, std::vector<std::string>>& result, + std::unordered_map<std::string, std::vector<Feature>>& result, const GeometryCollection& queryGeometry, const float bearing, const double tileSize, @@ -52,7 +53,7 @@ class FeatureIndex { private: void addFeature( - std::unordered_map<std::string, std::vector<std::string>>& result, + std::unordered_map<std::string, std::vector<Feature>>& result, const IndexedSubfeature &indexedFeature, const GeometryCollection& queryGeometry, const optional<std::vector<std::string>>& 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<TileCoordinate> pointsToCoordinates(const std::vector<ScreenCoordina return queryGeometry; } -std::vector<std::string> Map::queryRenderedFeatures(const ScreenCoordinate& point, const optional<std::vector<std::string>>& layerIDs) { +std::vector<Feature> Map::queryRenderedFeatures(const ScreenCoordinate& point, const optional<std::vector<std::string>>& 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<std::string> Map::queryRenderedFeatures(const std::array<ScreenCoordinate, 2>& box, const optional<std::vector<std::string>>& layerIDs) { +std::vector<Feature> Map::queryRenderedFeatures(const std::array<ScreenCoordinate, 2>& box, const optional<std::vector<std::string>>& layerIDs) { if (!impl->style) return {}; std::vector<ScreenCoordinate> 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<std::string, std::vector<std::string>> Source::queryRenderedFeatures( +std::unordered_map<std::string, std::vector<Feature>> Source::queryRenderedFeatures( const std::vector<TileCoordinate>& queryGeometry, const double zoom, const double bearing, const optional<std::vector<std::string>>& layerIDs) { - std::unordered_map<std::string, std::vector<std::string>> result; + std::unordered_map<std::string, std::vector<Feature>> result; double minX = std::numeric_limits<double>::infinity(); double minY = std::numeric_limits<double>::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 <mbgl/util/mat4.hpp> #include <mbgl/util/rapidjson.hpp> +#include <mbgl/util/feature.hpp> #include <forward_list> #include <vector> @@ -72,7 +73,7 @@ public: std::forward_list<Tile *> getLoadedTiles() const; const std::vector<Tile*>& getTiles() const; - std::unordered_map<std::string, std::vector<std::string>> queryRenderedFeatures( + std::unordered_map<std::string, std::vector<Feature>> queryRenderedFeatures( const std::vector<TileCoordinate>& 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 <mbgl/util/variant.hpp> -#include <mbgl/util/value.hpp> +#include <mbgl/util/feature.hpp> #include <string> #include <vector> 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<T1>::value || std::is_same<T1, bool>::value, bool> { return false; } + + bool operator()(const std::vector<Value>&, + const std::vector<Value>&) const { + return false; + } + + bool operator()(const std::unordered_map<std::string, Value>&, + const std::unordered_map<std::string, Value>&) const { + return false; + } }; template <class Op> 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<std::string> Style::queryRenderedFeatures( +std::vector<Feature> Style::queryRenderedFeatures( const std::vector<TileCoordinate>& queryGeometry, const double zoom, const double bearing, const optional<std::vector<std::string>>& layerIDs) { - std::vector<std::unordered_map<std::string, std::vector<std::string>>> sourceResults; + std::vector<std::unordered_map<std::string, std::vector<Feature>>> sourceResults; for (const auto& source : sources) { sourceResults.emplace_back(source->queryRenderedFeatures(queryGeometry, zoom, bearing, layerIDs)); } - - std::vector<std::string> features; + std::vector<Feature> 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 <mbgl/util/chrono.hpp> #include <mbgl/util/worker.hpp> #include <mbgl/util/optional.hpp> +#include <mbgl/util/feature.hpp> #include <cstdint> #include <string> @@ -108,7 +109,7 @@ public: RenderData getRenderData() const; - std::vector<std::string> queryRenderedFeatures( + std::vector<Feature> queryRenderedFeatures( const std::vector<TileCoordinate>& 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 <mbgl/util/value.hpp> +#include <mbgl/util/feature.hpp> #include <mbgl/util/chrono.hpp> #include <mbgl/util/ptr.hpp> #include <mbgl/util/vec.hpp> @@ -39,8 +39,8 @@ public: virtual ~GeometryTileFeature() = default; virtual FeatureType getType() const = 0; virtual optional<Value> getValue(const std::string& key) const = 0; - virtual std::unordered_map<std::string,Value> getProperties() const { return std::unordered_map<std::string,Value>{}; }; - virtual uint64_t getID() const { return 0; } + virtual Feature::property_map getProperties() const { return Feature::property_map(); } + virtual optional<uint64_t> 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::string, std::vector<std::string>>&, + std::unordered_map<std::string, std::vector<Feature>>&, 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 <mbgl/util/noncopyable.hpp> #include <mbgl/util/chrono.hpp> #include <mbgl/util/optional.hpp> +#include <mbgl/util/feature.hpp> #include <mbgl/map/tile_id.hpp> #include <mbgl/renderer/bucket.hpp> #include <mbgl/text/placement_config.hpp> @@ -85,7 +86,7 @@ public: virtual void redoPlacement(const std::function<void()>&) {} virtual void queryRenderedFeatures( - std::unordered_map<std::string, std::vector<std::string>>& result, + std::unordered_map<std::string, std::vector<Feature>>& 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<std::string,Value> VectorTileFeature::getProperties() const { return properties; } -uint64_t VectorTileFeature::getID() const { +optional<uint64_t> 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<Value> getValue(const std::string&) const override; std::unordered_map<std::string,Value> getProperties() const override; - uint64_t getID() const override; + optional<uint64_t> getID() const override; GeometryCollection getGeometries() const override; uint32_t getExtent() const override; private: const VectorTileLayer& layer; - uint64_t id = 0; + optional<uint64_t> 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<void()>& callback) { } void VectorTileData::queryRenderedFeatures( - std::unordered_map<std::string, std::vector<std::string>>& result, + std::unordered_map<std::string, std::vector<Feature>>& 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 <mbgl/tile/tile_data.hpp> #include <mbgl/tile/tile_worker.hpp> #include <mbgl/text/placement_config.hpp> +#include <mbgl/util/feature.hpp> #include <atomic> #include <memory> @@ -37,7 +38,7 @@ public: bool hasData() const override; void queryRenderedFeatures( - std::unordered_map<std::string, std::vector<std::string>>& result, + std::unordered_map<std::string, std::vector<Feature>>& 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 <mbgl/util/variant.hpp> - -namespace mbgl { - -typedef variant<bool, int64_t, uint64_t, double, std::string> Value; - -} // namespace mbgl |