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

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

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

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

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

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

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

4 ответов


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

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

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

обновление

так как вы используете Google maps UI плагин вот некоторые дополнительные коды. Я добавил щелчок даже на кнопке с class 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);

  });
});

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

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

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

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

Docs

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

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

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


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

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


маркер clusterer-плюс есть removeMarkers способ:

markerCluster.removeMarkers(markers);