Обновить markercluster после удаления маркеров из массива
В настоящее время я использую плагин markercluster с картами jquery ui.
У меня есть два массива - один из всех маркеров (называемых маркерами) и один из маркеров, которые соответствуют критериям поиска (так называемые current_markers). Они отделяются от первого массива.
Затем я рисую current_markers на экране.
Однако я обнаруживаю, что библиотека markerclusterer не обновляется на основе этого изменения.
Итак, как я могу обновить markerclusterer?
Можно ли назначить markerclusterer переменной и вызвать функцию обновления?
Ответы
Ответ 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.
Ответ 3
Лучше всего использовать метод clearMarkers() из объекта markerCluster:
http://google-maps-utility-library-v3.googlecode.com/svn/trunk/markerclusterer/docs/reference.html
Ответ 4
marker-clusterer-plus имеет метод removeMarkers
:
markerCluster.removeMarkers(markers);