Mapbox-GL setStyle удаляет слои

Я создаю картографическое веб-приложение с помощью Mapbox-GL. Он имеет много интересных функций. Я настроил кнопки для переключения базовых карт (т. е. спутник, местность и т. д.), Следуя примеру на веб-сайт Mapbox.

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

есть ли способ изменить стиль без перезагрузки карты или, по крайней мере, не сбрасывать слои?

вот мой код для коммутатора, он такой же, как пример, но я добавил условие для пользовательского стиля:

 var layerList = document.getElementById('menu');
    var inputs = layerList.getElementsByTagName('input');

    function switchLayer(layer) {
        var layerId = layer.target.id;
        if (layerId === 'outdoors') {
            map.setStyle('/outdoors-v8.json');
        } else {
        map.setStyle('mapbox://styles/mapbox/' + layerId + '-v8');
        }
    }

    for (var i = 0; i < inputs.length; i++) {
        inputs[i].onclick = switchLayer;
    }

1 ответов


вот пример, демонстрирующий, что:http://bl.ocks.org/tristen/0c0ed34e210a04e89984

В отличие от библиотеки карт, такой как Leaftlet, Mapbox GL JS не имеет понятия "базовая карта" против "других слоев."Все слои являются частью одной и той же сущности: стиль. Поэтому вам нужно сохранить некоторое состояние слоя данных и вызывать его источник / addLayer при каждом изменении.