Клуб API Карт

Удаления меток и кластеризатора

Пост в архиве.

Сообствено имеется такой код

 

var myMap, myCollection;
ymaps.ready(init);
//Определение начальных параметров карты
function init() {
    myMap = new ymaps.Map("map", {
        center: [56.326944, 44.0075],
        zoom: 7
    }, {
        balloonMaxWidth: 800
    });
    myCollection = new ymaps.GeoObjectCollection();
}
myGeoObjects = [];
function show_c(c) {
    myCollection.removeAll();
    //Запрос данных и вывод маркеров на карту
            cat: c
        },
        function (json) {
            for (i = 0; i < json.markers.length; i++) {
                var myPlacemark = new ymaps.Placemark([json.markers[i].lat, json.markers[i].lon], {
                    // Свойства
                    iconContent: json.markers[i].id,
                    balloonContentHeader: json.markers[i].name,
                    balloonContentBody: '<label>Тип Газа:</label> ' + json.markers[i].tipgaza + '<br><label>Описание:</label> ' + json.markers[i].descriptions + '<br><label>Разместил:</label> ' + json.markers[i].user + '',
                }, {
                    // Опции.
                    // Необходимо указать данный тип макета.
                    iconLayout: 'default#image',
                    iconImageHref: json.markers[i].styleplacemark,
                    iconImageSize: [32, 37],
                    iconImageOffset: [-16, -18]
                });
                myGeoObjects.push(myPlacemark);
            }
            var clusterer = new ymaps.Clusterer({
                preset: 'islands#invertedDarkOrangeClusterIcons'
            });
            clusterer.add(myGeoObjects);
            myMap.geoObjects.add(clusterer);
        });
    return false;
}

 

Он дабавляет метки на карту с кластеризаторами по категория, но вот появилась проблема с переключением категорий метки и кластеризаторы не удаляются а добавляюься к действующим.

Как в таком коде удать метки и кластеризаторы?

5 комментариев

Зачем тут вообще нужна коллекция myCollection?

Удаляйте из кластеризатора там же где вы делаете 

myCollection.removeAll(); 

 

В том то и дело что myCollection.removeAll();не удаляет да же метки которые не попали в кластер

при добавлении clusterer.removeAll(); то же нечего не удаляет просто престает работать вывод меток

 

В том то и дело что myCollection.removeAll();не удаляет да же метки которые не попали в кластер

Я не понимаю как метки в кластеризаторе и вне его связаны с myCollection и почему при myCollection.removeAll() что-то должно удалиться.

Судя по вашему коду, вы создали myCollection, ничего в нее не добавили, на карту ее не добавили, и вызываете зачем-то removeAll() на пустой коллекции.

Вы этот removeAll() из какого-то примера скопировали?

Я взял за основу этот пример http://webmap-blog.ru/examples/add-users-form/index-2.html

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

 

Дело в том что программирование это не составление шарад и не игра в пятнашки.

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

 

1. Вам тут эта коллекция не нужна, замените ее создание на создание кластеризатора

2. из своей функции show_c его (создание кластеризатора) надо убрать, оставив лишь добавление в него меток.

3. Заменить вызов myCollection.removeAll() на аналогичный вызов кластеризатора.

 

Если что-то не будет работать выкладывайте свой код на jsfiddle.net, сохраняйте, и публикуйте в посте ссылку. Код в посте публиковать не надо.