Показать / скрыть объекты, используя фильтр с 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']);

Взгляните на индивидуальный интерфейс, основанный на картографическом боксе, чтобы показать внутренние этажи.

Другие вопросы по тегам