diff --git a/platform/qt/include/qmapboxgl.hpp b/platform/qt/include/qmapboxgl.hpp index ad1f5e702..1caee09be 100644 --- a/platform/qt/include/qmapboxgl.hpp +++ b/platform/qt/include/qmapboxgl.hpp @@ -207,6 +207,8 @@ public: char* before = NULL); void removeCustomLayer(const QString& id); + void setFilter(const QString &layer, const QVariant &filter); + public slots: void render(); void connectionEstablished(); diff --git a/platform/qt/src/qmapboxgl.cpp b/platform/qt/src/qmapboxgl.cpp index a8fc51b23..c793353ac 100644 --- a/platform/qt/src/qmapboxgl.cpp +++ b/platform/qt/src/qmapboxgl.cpp @@ -642,6 +642,46 @@ void QMapboxGL::removeCustomLayer(const QString& id) d_ptr->mapObj->removeLayer(id.toStdString()); } +void QMapboxGL::setFilter(const QString& layer_, const QVariant& filter_) +{ + using namespace mbgl::style; + using namespace mbgl::style::conversion; + + Layer* layer = d_ptr->mapObj->getLayer(layer_.toStdString()); + if (!layer) { + qWarning() << "Layer not found:" << layer_; + return; + } + + Filter filter; + + Result converted = convert(filter_); + if (!converted) { + qWarning() << "Error parsing filter:" << converted.error().message; + return; + } + filter = std::move(*converted); + + if (layer->is()) { + layer->as()->setFilter(filter); + return; + } + if (layer->is()) { + layer->as()->setFilter(filter); + return; + } + if (layer->is()) { + layer->as()->setFilter(filter); + return; + } + if (layer->is()) { + layer->as()->setFilter(filter); + return; + } + + qWarning() << "Layer doesn't support filters"; +} + void QMapboxGL::render() { d_ptr->dirty = false;