Клуб API Карт

Удаление объектов, загруженых через geoXml.load

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

У меня есть:

ymaps.geoXml.load("http://site.ru/data1.xml").then(function (res) {

     myMap.geoObjects.add(res.geoObjects);

});

 

Где я загружаю объекты, которые распределены по файлам например: data1.xml, data2.xml, вопрос как загружать заново в ymaps.geoXml.load чтобы небыло "налипания", т.е. при изменении ymaps.geoXml.load на data2.xml объекты от data1.xml остаются, что делать в этом случае?: делать реaрешь функцией, удалять старые объекты или я не правильно загружаю ymaps.geoXml.load?

Так же прошу показать как удалять старые объекты или рефреш делать?

Загружаю я через jQuery примерно так: 

 

                $(".cc").toggle(

                function () {

                    var str = cat_get_id(this);

                    ymaps.geoXml.load("http://site.ru/" + str+".xml").then(function (res) {

                     myMap.geoObjects.add(res.geoObjects);                        

                     alert(str);

                    });...

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

В обработчике загрузки в добавляете коллекцию геообъектов на карту и забываете про нее. А вы сохраните на нее ссылочку в каком-нибудь укромном месте. И при загрузке других коллекций тоже сохранйте на них ссылки. Я бы на вскидку предложил использовать глобальный массив или хэш. Затем вам надо модифицировать код функции обработки загрузки данных, так чтобы у вас ненужные коллекции из этого глобального хранилища удалялись, а нужные добавлялись на карту.

 

ненужные коллекции из этого глобального хранилища удалялись, а нужные добавлялись на карту.

вот именно это, я прошу объяснить мне, как это сделать?

 

Коллекции геообъектов и геообъекты удаляются из родительских коллекций с помощью метода remove.

myMap.geoObjects.remove(res.geoObjects);

или 

res.geoObjects.getParent().remove(res.geoObjects);

почему-то не выходит

а можно сделать так, чтобы функция удаляла все коллекции например при нажатии на кнопку

 

$("button").click(function(){

remove?

});

процедура такая:

 

 

                    ymaps.geoXml.load("http://site.ru/ymapsml/map/31").then(function (res) {

                    

                   myMap.geoObjects.add(res.geoObjects);

                    });

 

 

загрузил

 

хочу удалить

к примеру:

 

                $("#loadx").live("click",function() {

                    ymaps.geoXml.load("http://site.ru/ymapsml/map/31").then(function (res) {

                    

                   myMap.geoObjects.remove(res.geoObjects);

                    });

});

 

не удаляет, метка на карте остается... =(

Я так понял удаление не происходит, потому, что это два разных объекта со своими ID как же прописать метод привильно?

 

хочу удалить

к примеру:

 

                $("#loadx").live("click",function() {

                    ymaps.geoXml.load("http://site.ru/ymapsml/map/31").then(function (res) {

                    

                   myMap.geoObjects.remove(res.geoObjects);

                    });

});

Не понял зачем для удаления объектов вы заного загружаете geoXml?

Для решения вашей задачи нужно добавлять загруженные данные

через отдельную коллекцию в map.geoObjects, а не напрямую

var map = new ymaps.Map(...),
    collection = new ymaps.GeoObjectCollection();

map.geoObjects.add(collection);

ymaps.geoXml.load("http://site.ru/ymapsml/map/31").then(function (res) {

    collection.add(res.geoObjects);

});


$("#loadx").live("click",function() {

    collection.removeAll();

});