summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/mbgl/map/map.hpp4
-rw-r--r--include/mbgl/util/geo.hpp2
-rw-r--r--platform/node/src/node_map.cpp13
-rw-r--r--src/mbgl/map/map.cpp26
4 files changed, 27 insertions, 18 deletions
diff --git a/include/mbgl/map/map.hpp b/include/mbgl/map/map.hpp
index 885fc6716c..39f0c86959 100644
--- a/include/mbgl/map/map.hpp
+++ b/include/mbgl/map/map.hpp
@@ -165,8 +165,8 @@ public:
void removeCustomLayer(const std::string& id);
// Feature queries
- std::vector<Feature> queryRenderedFeatures(const ScreenCoordinate&, const optional<std::vector<std::string>>& layerIDs = {});
- std::vector<Feature> queryRenderedFeatures(const std::array<ScreenCoordinate, 2>&, const optional<std::vector<std::string>>& layerIDs = {});
+ std::vector<Feature> queryRenderedFeatures(const ScreenCoordinate&, const optional<std::vector<std::string>>& layerIDs = {});
+ std::vector<Feature> queryRenderedFeatures(const ScreenBox&, const optional<std::vector<std::string>>& layerIDs = {});
// Memory
void setSourceTileCacheSize(size_t);
diff --git a/include/mbgl/util/geo.hpp b/include/mbgl/util/geo.hpp
index d88d8f3e8b..0fa782e06a 100644
--- a/include/mbgl/util/geo.hpp
+++ b/include/mbgl/util/geo.hpp
@@ -6,6 +6,7 @@
#include <mapbox/geometry/point.hpp>
#include <mapbox/geometry/point_arithmetic.hpp>
+#include <mapbox/geometry/box.hpp>
#include <cmath>
@@ -15,6 +16,7 @@ class CanonicalTileID;
class UnwrappedTileID;
using ScreenCoordinate = mapbox::geometry::point<double>;
+using ScreenBox = mapbox::geometry::box<double>;
class LatLng {
public:
diff --git a/platform/node/src/node_map.cpp b/platform/node/src/node_map.cpp
index b139e4252c..7ed826275f 100644
--- a/platform/node/src/node_map.cpp
+++ b/platform/node/src/node_map.cpp
@@ -473,20 +473,21 @@ NAN_METHOD(NodeMap::QueryRenderedFeatures) {
auto pos0 = Nan::Get(posOrBox, 0).ToLocalChecked().As<v8::Array>();
auto pos1 = Nan::Get(posOrBox, 1).ToLocalChecked().As<v8::Array>();
- std::array<mbgl::ScreenCoordinate, 2> queryBox = {{{
+ result = nodeMap->map->queryRenderedFeatures(mbgl::ScreenBox {
+ {
Nan::Get(pos0, 0).ToLocalChecked()->NumberValue(),
Nan::Get(pos0, 1).ToLocalChecked()->NumberValue()
}, {
Nan::Get(pos1, 0).ToLocalChecked()->NumberValue(),
Nan::Get(pos1, 1).ToLocalChecked()->NumberValue()
- }}};
- result = nodeMap->map->queryRenderedFeatures(queryBox);
+ }
+ });
} else {
- mbgl::ScreenCoordinate queryPoint(
+ result = nodeMap->map->queryRenderedFeatures(mbgl::ScreenCoordinate {
Nan::Get(posOrBox, 0).ToLocalChecked()->NumberValue(),
- Nan::Get(posOrBox, 1).ToLocalChecked()->NumberValue());
- result = nodeMap->map->queryRenderedFeatures(queryPoint);
+ Nan::Get(posOrBox, 1).ToLocalChecked()->NumberValue()
+ });
}
auto array = Nan::New<v8::Array>();
diff --git a/src/mbgl/map/map.cpp b/src/mbgl/map/map.cpp
index a4f9422184..2c2b9f910c 100644
--- a/src/mbgl/map/map.cpp
+++ b/src/mbgl/map/map.cpp
@@ -736,23 +736,29 @@ std::vector<TileCoordinate> pointsToCoordinates(const std::vector<ScreenCoordina
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);
+ return impl->style->queryRenderedFeatures(
+ pointsToCoordinates({ point }, impl->transform.getState()),
+ impl->transform.getZoom(),
+ impl->transform.getAngle(),
+ layerIDs);
}
-std::vector<Feature> Map::queryRenderedFeatures(const std::array<ScreenCoordinate, 2>& box, const optional<std::vector<std::string>>& layerIDs) {
+std::vector<Feature> Map::queryRenderedFeatures(const ScreenBox& 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 }
+ box.min,
+ { box.max.x, box.min.y },
+ box.max,
+ { box.min.x, box.max.y },
+ box.min
};
- auto queryGeometry = pointsToCoordinates(queryPoints, impl->transform.getState());
- return impl->style->queryRenderedFeatures(queryGeometry, impl->transform.getZoom(), impl->transform.getAngle(), layerIDs);
+ return impl->style->queryRenderedFeatures(
+ pointsToCoordinates(queryPoints, impl->transform.getState()),
+ impl->transform.getZoom(),
+ impl->transform.getAngle(),
+ layerIDs);
}