MapBox: отображение / скрытие маркеров с помощью списка переключения

Я пытаюсь понять, как показать / скрыть маркеры MapBox на основе динамического списка переключения.

На данный момент у меня есть карта MapBox, и я могу успешно добавить к ней несколько маркеров с помощью этого кода;

for (var i = 0; i < markers.length; i++) {
    var la = markers[i]['lat'];
    var lo = markers[i]['long'];
    var siteName = markers[i]['Site Name']
    var siteType = markers[i]['Site Type']
    var siteAddr = markers[i]['Address']
    var colour = markers[i]["Colour"];

    new mapboxgl.Marker({
    "color":colour
    })
    .setLngLat([lo,la])
    .setPopup(new mapboxgl.Popup()
    .setHTML("<b>" + siteName + "</b><br>(" + siteType + ")<br>" + siteAddr )).addTo(map);
}

Все это работает нормально, и я получаю красивую карту.

Затем я вдохновился этим примером и попытался показать / скрыть маркеры на основе siteType, как показано здесь; https://docs.mapbox.com/mapbox-gl-js/example/filter-markers/

У меня проблема в том, что пример основан на использовании слоев, а моя карта использует маркеры.

Я долго пробовал разные вещи, но в конечном итоге я даже не уверен, какую стратегию принять, не говоря уже о коде, необходимом для ее поддержки.

Можно ли показать / скрыть маркеры с помощью списка переключения, или я должен использовать слои для этого? Если возможно, то как? И как с помощью слоев вы настраиваете отдельные местоположения, чтобы они могли иметь отдельные всплывающие окна? Я не после того, как кто-то накормит меня кодом с ложечки (хотя я бы не сказал «нет»!), В основном я после предложения / обсуждения стратегии, которую я могу принять для достижения своей цели.

Спасибо!


person RichardAtkin    schedule 07.04.2021    source источник


Ответы (1)


Маркеры и слои ведут себя совершенно по-разному.

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

С помощью маркеров вы управляете каждым маркером индивидуально. Вы можете скрыть / показать маркер с помощью CSS (например, изменив его opacity на 0), но чаще вы просто удаляете маркер с помощью Marker.remove() и добавляете его позже.

person Steve Bennett    schedule 08.04.2021