diff options
author | Tobrun Van Nuland <tobrun.van.nuland@gmail.com> | 2017-08-21 13:50:32 +0200 |
---|---|---|
committer | Tobrun Van Nuland <tobrun.van.nuland@gmail.com> | 2017-09-14 12:02:49 +0200 |
commit | 6d6a30a0c4975077b0dccd52f088fa53d27b3198 (patch) | |
tree | 4cd8789d8617e894173ba45b70b8946c3ca8371a | |
parent | c795d96bfb980f8b60b9295b5182b2ee90893149 (diff) | |
download | qtlocation-mapboxgl-6d6a30a0c4975077b0dccd52f088fa53d27b3198.tar.gz |
[core] - optional geometry conversion for QueryRenderedFeatures
-rw-r--r-- | include/mbgl/renderer/query.hpp | 8 | ||||
-rw-r--r-- | src/mbgl/geometry/feature_index.cpp | 6 | ||||
-rw-r--r-- | src/mbgl/tile/geometry_tile_data.cpp | 7 | ||||
-rw-r--r-- | src/mbgl/tile/geometry_tile_data.hpp | 3 |
4 files changed, 21 insertions, 3 deletions
diff --git a/include/mbgl/renderer/query.hpp b/include/mbgl/renderer/query.hpp index 4cadf4f017..74df1a8f57 100644 --- a/include/mbgl/renderer/query.hpp +++ b/include/mbgl/renderer/query.hpp @@ -14,14 +14,18 @@ namespace mbgl { class RenderedQueryOptions { public: RenderedQueryOptions(optional<std::vector<std::string>> layerIDs_ = {}, - optional<style::Filter> filter_ = {}) + optional<style::Filter> filter_ = {}, + optional<bool> geometryConversion_ = true) : layerIDs(std::move(layerIDs_)), - filter(std::move(filter_)) {} + filter(std::move(filter_)), + geometryConversion(geometryConversion_) {} /** layerIDs to include in the query */ optional<std::vector<std::string>> layerIDs; optional<style::Filter> filter; + + optional<bool> geometryConversion; }; /** diff --git a/src/mbgl/geometry/feature_index.cpp b/src/mbgl/geometry/feature_index.cpp index 1adb933e44..d97706d345 100644 --- a/src/mbgl/geometry/feature_index.cpp +++ b/src/mbgl/geometry/feature_index.cpp @@ -131,7 +131,11 @@ void FeatureIndex::addFeature( continue; } - result[layerID].push_back(convertFeature(*geometryTileFeature, tileID)); + if (!options.geometryConversion || options.geometryConversion.value()){ + result[layerID].push_back(convertFeature(*geometryTileFeature, tileID)); + } else { + result[layerID].push_back(convertFeatureProperties(*geometryTileFeature)); + } } } diff --git a/src/mbgl/tile/geometry_tile_data.cpp b/src/mbgl/tile/geometry_tile_data.cpp index 680f8d1497..91407ac1a8 100644 --- a/src/mbgl/tile/geometry_tile_data.cpp +++ b/src/mbgl/tile/geometry_tile_data.cpp @@ -180,4 +180,11 @@ Feature convertFeature(const GeometryTileFeature& geometryTileFeature, const Can return feature; } +Feature convertFeatureProperties(const GeometryTileFeature& geometryTileFeature) { + Feature feature { Point<double>() }; + feature.properties = geometryTileFeature.getProperties(); + feature.id = geometryTileFeature.getID(); + return feature; +} + } // namespace mbgl diff --git a/src/mbgl/tile/geometry_tile_data.hpp b/src/mbgl/tile/geometry_tile_data.hpp index 449d8cab28..5677db2b16 100644 --- a/src/mbgl/tile/geometry_tile_data.hpp +++ b/src/mbgl/tile/geometry_tile_data.hpp @@ -78,6 +78,9 @@ void limitHoles(GeometryCollection&, uint32_t maxHoles); // convert from GeometryTileFeature to Feature (eventually we should eliminate GeometryTileFeature) Feature convertFeature(const GeometryTileFeature&, const CanonicalTileID&); +// convert from GeometryTileFeature to Feature without geometry (eventually we should eliminate GeometryTileFeature) +Feature convertFeatureProperties(const GeometryTileFeature&); + // Fix up possibly-non-V2-compliant polygon geometry using angus clipper. // The result is guaranteed to have correctly wound, strictly simple rings. GeometryCollection fixupPolygons(const GeometryCollection&); |