From 8ec0b70722c704545c4c1953799c43481a038489 Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Thu, 12 May 2016 14:27:12 -0700 Subject: [core] Use mapbox::geometry::box in queryRenderedFeatures --- include/mbgl/map/map.hpp | 4 ++-- include/mbgl/util/geo.hpp | 2 ++ platform/node/src/node_map.cpp | 13 +++++++------ src/mbgl/map/map.cpp | 26 ++++++++++++++++---------- 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 queryRenderedFeatures(const ScreenCoordinate&, const optional>& layerIDs = {}); - std::vector queryRenderedFeatures(const std::array&, const optional>& layerIDs = {}); + std::vector queryRenderedFeatures(const ScreenCoordinate&, const optional>& layerIDs = {}); + std::vector queryRenderedFeatures(const ScreenBox&, const optional>& 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 #include +#include #include @@ -15,6 +16,7 @@ class CanonicalTileID; class UnwrappedTileID; using ScreenCoordinate = mapbox::geometry::point; +using ScreenBox = mapbox::geometry::box; 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(); auto pos1 = Nan::Get(posOrBox, 1).ToLocalChecked().As(); - std::array 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(); 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 pointsToCoordinates(const std::vector Map::queryRenderedFeatures(const ScreenCoordinate& point, const optional>& 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 Map::queryRenderedFeatures(const std::array& box, const optional>& layerIDs) { +std::vector Map::queryRenderedFeatures(const ScreenBox& box, const optional>& layerIDs) { if (!impl->style) return {}; std::vector 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); } -- cgit v1.2.1