summaryrefslogtreecommitdiff
path: root/src/mbgl/map/map.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/map/map.cpp')
-rw-r--r--src/mbgl/map/map.cpp34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/mbgl/map/map.cpp b/src/mbgl/map/map.cpp
index 46eaa5049b..38198d42ec 100644
--- a/src/mbgl/map/map.cpp
+++ b/src/mbgl/map/map.cpp
@@ -22,6 +22,7 @@
#include <mbgl/util/exception.hpp>
#include <mbgl/util/async_task.hpp>
#include <mbgl/util/mapbox.hpp>
+#include <mbgl/util/tile_coordinate.hpp>
namespace mbgl {
@@ -711,6 +712,39 @@ AnnotationIDs Map::getPointAnnotationsInBounds(const LatLngBounds& bounds) {
return impl->annotationManager->getPointAnnotationsInBounds(bounds);
}
+#pragma mark - Feature query api
+
+std::vector<TileCoordinate> pointsToCoordinates(const std::vector<ScreenCoordinate>& queryPoints, const TransformState& transformState) {
+ std::vector<TileCoordinate> queryGeometry;
+ for (auto& p : queryPoints) {
+ queryGeometry.push_back(TileCoordinate::fromScreenCoordinate(transformState, 0, { p.x, transformState.getHeight() - p.y }));
+ }
+ return queryGeometry;
+}
+
+std::vector<std::string> 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) {
+ if (!impl->style) return {};
+
+ std::vector<ScreenCoordinate> queryPoints {
+ { box[0].x, box[0].y },
+ { box[1].x, box[0].y },
+ { box[1].x, box[1].y },
+ { box[0].x, box[1].y },
+ { box[0].x, box[0].y }
+ };
+ auto queryGeometry = pointsToCoordinates(queryPoints, impl->transform.getState());
+
+ return impl->style->queryRenderedFeatures(queryGeometry, impl->transform.getZoom(), impl->transform.getAngle(), layerIDs);
+}
+
+
#pragma mark - Style API
void Map::addCustomLayer(const std::string& id,