Показать / скрыть объекты, используя фильтр с mapbox-gl-js
Я работаю над внутренним проектом с использованием mapbox и ищу способ показать / скрыть объекты (этажи) с определенным свойством level=x
, В первой версии mapboxjs можно было использовать это. Теперь в версии GL я могу легко показать / скрыть слой, используя фильтр, но это не то, к чему я стремлюсь, потому что слои уже определены (комнаты, коридоры, лестницы...) и не зависят от этажей:
{
"id": "rooms",
"filter": [
"all", [
"==",
"type",
"room"
], [
"!in",
"subtype",
"stairs",
"elevator"
]
],
"source": "indoorSource",
"source-layer": "indoor",
...
},
{
"id": "handrails",
"filter": [
"==",
"handrail",
"yes"
],
"source": "indoorSource",
"source-layer": "indoor",
...
}
Я могу запросить, какие функции я хотел бы использовать:
map.querySourceFeatures("indoorSource", {sourceLayer: "indoor", filter: ["==", "level", "2"]})
но я не нашел способа показать / скрыть возвращенные функции.
Для информации: indoorSource - векторная плитка от веб-сервера:
"indoorSource": {
"type": "vector",
"tiles": ["http://xxx.xxx/tiles/{z}/{x}/{y}.pbf"]
}
Заранее спасибо,
Тибо
1 ответ
Map#setFilter
принимает фильтры, так же, как Map#querySourceFeatures
и использует их для отображения / скрытия объектов на карте.
map.addLayer({
'id': 'indoor',
'source': 'indoor',
'source-layer': ...
...
});
map.setFilter('indoor', ['==', 'level', '2']);
Взгляните на индивидуальный интерфейс, основанный на картографическом боксе, чтобы показать внутренние этажи.