Клуб API Карт

Как избавиться от дублей меток при обновлении карты

Светлана Лапшина
24 декабря 2014, 12:00

 Добрый день.

Сразу скажу, в java не силен..... и поиском по клубу API пользовался, решения не нашел.

 

Есть код, он получает от php метки и выводит их, все работает.

Но при каждом нажатии в форме поиска найти, метки добавляются к старым и дублируются, вопрос как избавится от дублей

пробовал так и в разных местах, непомогает       

cluster.removeAll();
myMap.geoObjects.remove(cluster);

 

 

Версия API 2.1

 ymaps.ready(init);

    function init () {
        // координаты
        myMap = new ymaps.Map('map', {
            center: [54.891586, 38.071433],
            zoom: 12,
            controls: ["zoomControl", "fullscreenControl","trafficControl","typeSelector","rulerControl","geolocationControl"],
            type: 'yandex#map'
        });
        

    // Создаем кластеризатор
    var clusterIcons = [{
        href: '/images/map/m1.png',
        size: [60, 60],
        // Отступ, чтобы центр картинки совпадал с центром кластера.
        offset: [-20, -20]
    },    {
        href: '/images/map/m2.png',
        size: [80, 80],
        offset: [-30, -30]
    },    {
        href: '/images/map/m3.png',
        size: [80, 80],
        offset: [-30, -30]
    }],
    clusterNumbers = [10,40],


    cluster = new ymaps.Clusterer({
        // Если опции для кластеров задаются через кластеризатор,
        // необходимо указывать их с префиксами "cluster".
        clusterIcons: clusterIcons,
        clusterNumbers: clusterNumbers
        });
    markers = [];
 


$(function(){
$('#SearchMap').submit(function(e){
        //отменяем стандартное действие при отправке формы
e.preventDefault();
        //берем из формы метод передачи данных
var m_method=$(this).attr('method');
        //получаем адрес скрипта на сервере, куда нужно отправить форму
var m_action=$(this).attr('action');
        //получаем данные, введенные пользователем в формате input1=value1&input2=value2...,
        //то есть в стандартном формате передачи данных формы
var m_data=$(this).serialize();
console.log(m_data);
$.ajax({
type: m_method,
url: m_action,
data: m_data,
success: function(json){
        if (json.status == 'OK') {  
        cluster.removeAll(); // не удаляются точки и кластеры после повторного поиска дубли лезут
        myMap.geoObjects.remove(cluster); // не удаляются точки и кластеры после повторного поиска
                for (i = 0; i < json.markers.length; i++) {
                            var placemark = new ymaps.Placemark(
                            // Координаты
                            [ json.markers[i].lon, json.markers[i].lat ],{
                                // html для отображения в балуне
                                  balloonContentHeader: ''+ json.markers[i].cname+'',
                                balloonContentBody: '<div padding: 5px"><table cellspacing="0" cellpadding="0" width="100%"><tbody><tr><td width="80"><img src="/images/realty/small/' + json.markers[i].image + '" width="58"/></td><td>' + json.markers[i].min_price + ' ' + json.markers[i].max_price + ' руб/м <sup>2</sup><br>' + json.markers[i].to_date + ' <a href=/base/' + json.markers[i].url + '>просмотр</a><br>Адрес: ' + json.markers[i].address + '</td></tr></tbody></table></div>',
                                balloonContentFooter: '',
                                //preset: 'islands#greenCircleIcon'
                            },    {
                                iconLayout: 'default#image',
                                iconImageHref: '/images/map/icon8.png', // картинка иконки
                                iconImageSize: [35, 49] // размеры картинки
                            });
                //placemark.options.set("preset", "twirl#redIcon");
                markers.push(placemark);
                }  
            
            // Добавлеяем массив меток в кластер
            cluster.add(markers);
            // Добавляем кластер на карту
        
            myMap.geoObjects.add(cluster);    
            //выставим центр и масштаб по точкам
            myMap.setBounds(myMap.geoObjects.getBounds());            
        }else{
        alert('Нам очень жаль. Произошла ошибка при загрузке данных!');
        }
    }
});
});
});
 
        
}

       

 

2 комментария
Подписаться на комментарии к посту

Видимо надо и markers обнулять, а то вы их каждый раз в массив добавляете и добавляете

Светлана Лапшина
24 декабря 2014, 13:12

Спасибо! Помогло

вместо
myMap.geoObjects.remove(cluster);
      

так:
markers = [];  // обнулим маркеры