обновить markercluster после удаления маркеров из массива - PullRequest
21 голосов
/ 22 ноября 2011

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

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

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

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

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

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

Ответы [ 4 ]

49 голосов
/ 24 июня 2014

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

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

Предполагается, что вы создали объект 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 = [];

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

Docs

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

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

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

13 голосов
/ 22 ноября 2011

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

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

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

Обновление

, так как вы используете плагин пользовательского интерфейса Google Maps, вот некоторый дополнительный код.Я добавил клик даже на кнопке с классом 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's still present in this function
  });

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

    // rebuild you markers here ...

    _markerCluster = new MarkerClusterer(_map, newMarkers);

  });
});
9 голосов
/ 31 августа 2013

Лучше использовать метод clearMarkers () из объекта markerCluster:

http://google -maps-utility-library-v3.googlecode.com / svn / trunk / markerclusterer / docs /reference.html

3 голосов
/ 20 мая 2016

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

markerCluster.removeMarkers(markers);
...