Подтвердить что ты не робот

Как очистить карту буклетов всех маркеров и слоев, прежде чем добавлять новые?

У меня есть код:

    map: function (events) {
            var arrayOfLatLngs = [];
            var _this = this;

            // setup a marker group
            var markers = L.markerClusterGroup();

            events.forEach(function (event) {
                // setup the bounds
                arrayOfLatLngs.push(event.location);

                // create the marker
                var marker = L.marker([event.location.lat, event.location.lng]);

                marker.bindPopup(View(event));

                // add marker
                markers.addLayer(marker);
            });

            // add the group to the map
            // for more see https://github.com/Leaflet/Leaflet.markercluster
            this.map.addLayer(markers);

            var bounds = new L.LatLngBounds(arrayOfLatLngs);
            this.map.fitBounds(bounds);
            this.map.invalidateSize();
        }

i первоначально вызываю эту функцию, и она добавит все events к карте с маркерами и кластерами.

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

Я пробовал this.map.removeLayer(markers); и некоторые другие вещи, но я не могу потерять старые маркеры

любые идеи?

4b9b3361

Ответ 1

Если вы хотите удалить все текущие слои (маркеры) в своей группе, вы можете использовать метод clearLayers L.markerClusterGroup(). Ваша ссылка называется markers, поэтому вам нужно позвонить:

markers.clearLayers();

Ответ 2

Вы теряете ссылку на маркер, потому что она задана с помощью var. Вместо этого попробуйте сохранить ссылки на 'this'.

mapMarkers: [],
map: function (events) {
    [...]
    events.forEach(function (event) {
        [...]
        // create the marker
        var marker = L.marker([event.location.lat, event.location.lng]);
        [...]
        // Add marker to this.mapMarker for future reference
        this.mapMarkers.push(marker);
    });
    [...]
}

Затем, когда вам нужно удалить маркеры, выполните следующие действия:

for(var i = 0; i < this.mapMarkers.length; i++){
    this.map.removeLayer(this.mapMarkers[i]);
}

В качестве альтернативы вместо сохранения каждой ссылки на каждый маркер вы можете просто сохранить кластер в 'this'.