summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobrun Van Nuland <tobrun.van.nuland@gmail.com>2017-08-21 13:50:32 +0200
committerTobrun Van Nuland <tobrun.van.nuland@gmail.com>2017-09-14 12:02:49 +0200
commit6d6a30a0c4975077b0dccd52f088fa53d27b3198 (patch)
tree4cd8789d8617e894173ba45b70b8946c3ca8371a
parentc795d96bfb980f8b60b9295b5182b2ee90893149 (diff)
downloadqtlocation-mapboxgl-6d6a30a0c4975077b0dccd52f088fa53d27b3198.tar.gz
[core] - optional geometry conversion for QueryRenderedFeatures
-rw-r--r--include/mbgl/renderer/query.hpp8
-rw-r--r--src/mbgl/geometry/feature_index.cpp6
-rw-r--r--src/mbgl/tile/geometry_tile_data.cpp7
-rw-r--r--src/mbgl/tile/geometry_tile_data.hpp3
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&);