summaryrefslogtreecommitdiff
path: root/platform
diff options
context:
space:
mode:
authorAsheem Mamoowala <asheemm@gmail.com>2017-02-21 18:34:45 -0800
committerIvo van Dongen <ivovandongen@users.noreply.github.com>2017-03-04 15:42:07 -0800
commit60d10dd27df38ac4e97214d1cd514198c381695c (patch)
treef4ce0ecbf3a7eeb5c19f994d02152fc624b458d9 /platform
parentac4e13416a36905b35401fc1a982c680ca37a3d0 (diff)
downloadqtlocation-mapboxgl-60d10dd27df38ac4e97214d1cd514198c381695c.tar.gz
[core] Add support for queryRenderedFeatures filter
Diffstat (limited to 'platform')
-rwxr-xr-xplatform/android/src/native_map_view.cpp4
-rw-r--r--platform/ios/src/MGLMapView.mm4
-rw-r--r--platform/macos/src/MGLMapView.mm4
-rw-r--r--platform/node/src/node_map.cpp41
-rw-r--r--platform/node/test/suite_implementation.js2
5 files changed, 46 insertions, 9 deletions
diff --git a/platform/android/src/native_map_view.cpp b/platform/android/src/native_map_view.cpp
index 1930d1854d..73edc8e298 100755
--- a/platform/android/src/native_map_view.cpp
+++ b/platform/android/src/native_map_view.cpp
@@ -721,7 +721,7 @@ jni::Array<jni::Object<Feature>> NativeMapView::queryRenderedFeaturesForPoint(JN
}
point<double> point = {x, y};
- return *convert<jni::Array<jni::Object<Feature>>, std::vector<mbgl::Feature>>(env, map->queryRenderedFeatures(point, layers));
+ return *convert<jni::Array<jni::Object<Feature>>, std::vector<mbgl::Feature>>(env, map->queryRenderedFeatures(point, { layers, {} }));
}
jni::Array<jni::Object<Feature>> NativeMapView::queryRenderedFeaturesForBox(JNIEnv& env, jni::jfloat left, jni::jfloat top, jni::jfloat right, jni::jfloat bottom, jni::Array<jni::String> layerIds) {
@@ -734,7 +734,7 @@ jni::Array<jni::Object<Feature>> NativeMapView::queryRenderedFeaturesForBox(JNIE
}
box<double> box = { point<double>{ left, top}, point<double>{ right, bottom } };
- return *convert<jni::Array<jni::Object<Feature>>, std::vector<mbgl::Feature>>(env, map->queryRenderedFeatures(box, layers));
+ return *convert<jni::Array<jni::Object<Feature>>, std::vector<mbgl::Feature>>(env, map->queryRenderedFeatures(box, { layers, {} }));
}
jni::Array<jni::Object<Layer>> NativeMapView::getLayers(JNIEnv& env) {
diff --git a/platform/ios/src/MGLMapView.mm b/platform/ios/src/MGLMapView.mm
index 58f8f407e4..2990a4e163 100644
--- a/platform/ios/src/MGLMapView.mm
+++ b/platform/ios/src/MGLMapView.mm
@@ -4621,7 +4621,7 @@ public:
optionalLayerIDs = layerIDs;
}
- std::vector<mbgl::Feature> features = _mbglMap->queryRenderedFeatures(screenCoordinate, optionalLayerIDs);
+ std::vector<mbgl::Feature> features = _mbglMap->queryRenderedFeatures(screenCoordinate, { optionalLayerIDs, {} });
return MGLFeaturesFromMBGLFeatures(features);
}
@@ -4645,7 +4645,7 @@ public:
optionalLayerIDs = layerIDs;
}
- std::vector<mbgl::Feature> features = _mbglMap->queryRenderedFeatures(screenBox, optionalLayerIDs);
+ std::vector<mbgl::Feature> features = _mbglMap->queryRenderedFeatures(screenBox, { optionalLayerIDs, {} });
return MGLFeaturesFromMBGLFeatures(features);
}
diff --git a/platform/macos/src/MGLMapView.mm b/platform/macos/src/MGLMapView.mm
index 827da35076..ff98095e15 100644
--- a/platform/macos/src/MGLMapView.mm
+++ b/platform/macos/src/MGLMapView.mm
@@ -2533,7 +2533,7 @@ public:
optionalLayerIDs = layerIDs;
}
- std::vector<mbgl::Feature> features = _mbglMap->queryRenderedFeatures(screenCoordinate, optionalLayerIDs);
+ std::vector<mbgl::Feature> features = _mbglMap->queryRenderedFeatures(screenCoordinate, { optionalLayerIDs });
return MGLFeaturesFromMBGLFeatures(features);
}
@@ -2558,7 +2558,7 @@ public:
optionalLayerIDs = layerIDs;
}
- std::vector<mbgl::Feature> features = _mbglMap->queryRenderedFeatures(screenBox, optionalLayerIDs);
+ std::vector<mbgl::Feature> features = _mbglMap->queryRenderedFeatures(screenBox, { optionalLayerIDs });
return MGLFeaturesFromMBGLFeatures(features);
}
diff --git a/platform/node/src/node_map.cpp b/platform/node/src/node_map.cpp
index 66cdb3eda7..174db7d737 100644
--- a/platform/node/src/node_map.cpp
+++ b/platform/node/src/node_map.cpp
@@ -10,6 +10,7 @@
#include <mbgl/style/conversion/layer.hpp>
#include <mbgl/style/conversion/filter.hpp>
#include <mbgl/sprite/sprite_image.cpp>
+#include <mbgl/map/query.hpp>
#include <unistd.h>
@@ -866,6 +867,9 @@ void NodeMap::DumpDebugLogs(const Nan::FunctionCallbackInfo<v8::Value>& info) {
}
void NodeMap::QueryRenderedFeatures(const Nan::FunctionCallbackInfo<v8::Value>& info) {
+ using namespace mbgl::style;
+ using namespace mbgl::style::conversion;
+
auto nodeMap = Nan::ObjectWrap::Unwrap<NodeMap>(info.Holder());
if (!nodeMap->map) return Nan::ThrowError(releasedMessage());
@@ -878,6 +882,39 @@ void NodeMap::QueryRenderedFeatures(const Nan::FunctionCallbackInfo<v8::Value>&
return Nan::ThrowTypeError("First argument must have two components");
}
+ mbgl::QueryOptions queryOptions;
+ if (!info[1]->IsNull() && !info[1]->IsUndefined()) {
+ if (!info[1]->IsObject()) {
+ return Nan::ThrowTypeError("options argument must be an object");
+ }
+
+ auto options = Nan::To<v8::Object>(info[1]).ToLocalChecked();
+
+ //Check if layers is set. If provided, it must be an array of strings
+ if (Nan::Has(options, Nan::New("layers").ToLocalChecked()).FromJust()) {
+ auto layersOption = Nan::Get(options, Nan::New("layers").ToLocalChecked()).ToLocalChecked();
+ if (!layersOption->IsArray()) {
+ return Nan::ThrowTypeError("Requires options.layers property to be an array");
+ }
+ auto layers = layersOption.As<v8::Array>();
+ std::vector<std::string> layersVec;
+ for (uint32_t i=0; i < layers->Length(); i++) {
+ layersVec.push_back(*Nan::Utf8String(Nan::Get(layers,i).ToLocalChecked()));
+ }
+ queryOptions.layerIDs = layersVec;
+ }
+
+ //Check if filter is provided. If set it must be a valid Filter object
+ if (Nan::Has(options, Nan::New("filter").ToLocalChecked()).FromJust()) {
+ auto filterOption = Nan::Get(options, Nan::New("filter").ToLocalChecked()).ToLocalChecked();
+ Result<Filter> converted = convert<Filter>(filterOption);
+ if (!converted) {
+ return Nan::ThrowTypeError(converted.error().message.c_str());
+ }
+ queryOptions.filter = std::move(*converted);
+ }
+ }
+
try {
std::vector<mbgl::Feature> result;
@@ -894,13 +931,13 @@ void NodeMap::QueryRenderedFeatures(const Nan::FunctionCallbackInfo<v8::Value>&
Nan::Get(pos1, 0).ToLocalChecked()->NumberValue(),
Nan::Get(pos1, 1).ToLocalChecked()->NumberValue()
}
- });
+ }, queryOptions);
} else {
result = nodeMap->map->queryRenderedFeatures(mbgl::ScreenCoordinate {
Nan::Get(posOrBox, 0).ToLocalChecked()->NumberValue(),
Nan::Get(posOrBox, 1).ToLocalChecked()->NumberValue()
- });
+ }, queryOptions);
}
auto array = Nan::New<v8::Array>();
diff --git a/platform/node/test/suite_implementation.js b/platform/node/test/suite_implementation.js
index 6648757a98..ef97652893 100644
--- a/platform/node/test/suite_implementation.js
+++ b/platform/node/test/suite_implementation.js
@@ -49,7 +49,7 @@ module.exports = function (style, options, callback) {
applyOperations(options.operations, function() {
map.render(options, function (err, pixels) {
var results = options.queryGeometry ?
- map.queryRenderedFeatures(options.queryGeometry) :
+ map.queryRenderedFeatures(options.queryGeometry, options.queryOptions || {}) :
[];
map.release();
if (timedOut) return;