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

Обновить markercluster после удаления маркеров из массива

В настоящее время я использую плагин markercluster с картами jquery ui.

У меня есть два массива - один из всех маркеров (называемых маркерами) и один из маркеров, которые соответствуют критериям поиска (так называемые current_markers). Они отделяются от первого массива.

Затем я рисую current_markers на экране.

Однако я обнаруживаю, что библиотека markerclusterer не обновляется на основе этого изменения.

Итак, как я могу обновить markerclusterer?

Можно ли назначить markerclusterer переменной и вызвать функцию обновления?

4b9b3361

Ответ 1

Вы должны сохранить объект-маркер в var и затем удалить карту следующим образом:

var markerCluster = new MarkerClusterer(map, markers);
/// ... later on
markerCluster.setMap(null);

после того, как вы это сделали, вы можете запустить new MarkerClusterer с новыми маркерами

Обновление

так как вы используете google maps ui plugin здесь некоторый дополнительный код. Я добавил клик даже на кнопке с классом reset_markercluster, конечно, это просто показать, как использовать его для вызова карты

var _map, _markerCluster;

$(function() {
  $('#map_canvas').gmap().bind('init', function(event, map) { 
    _map = map; // at this point you can call _map whenever you need to call the map

    // build up your markers here ...

    _markerCluster = new MarkerClusterer(_map, markers);  // you could also use map instead of _map here cause it still present in this function
  });

  $("button.reset_markercluster").click(function(e) {
    e.preventDefault();
    _markerCluster.setMap(null);  // remove the previous added markerCluster

    // rebuild you markers here ...

    _markerCluster = new MarkerClusterer(_map, newMarkers);

  });
});

Ответ 2

Да, вы можете.

Создание карты

Предполагая, что вы создали свой объект MarkerClusterer примерно так:

var center = new google.maps.LatLng(10, 20);
var map = new google.maps.Map(document.getElementById('map'), { zoom: 6, center: center, mapTypeId: google.maps.MapTypeId.ROADMAP });
var markerClusterer = new MarkerClusterer(map);

Добавление маркеров

Вы можете добавить к нему несколько маркеров примерно так:

var markers = []
var marker = new google.maps.Marker({position: center});
markers.push(marker);
markerClusterer.addMarkers(markers);

Обратите внимание, что здесь я добавил только один.

Удаление всех маркеров

Затем вы можете очистить все маркеры с помощью clearMarkers примерно так:

markerClusterer.clearMarkers();
markers = [];

Обратите внимание, что для удобства я также отключил массив маркеров.

Документы

Полная документация по всем доступным методам доступна здесь:

https://googlemaps.github.io/js-marker-clusterer/docs/reference.html

Это разумный и относительно полный API.

Ответ 4

marker-clusterer-plus имеет метод removeMarkers:

markerCluster.removeMarkers(markers);