Клуб API Карт

Проблема при добавлении geoObjects на карту

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

Здравствуйте!

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

  

 ymaps.geoXml.load(url).then(function (res) {

    res.geoObjects.each(function(geoObject){

        myMap.geoObjects.add(geoObject);

    });

});

 

При этом на карту добавляются только нечетные объекты, а четные просто пропускаются. Кто-нибудь сталкивался с такой проблемой?

P.S. Судя по всему метод myMap.geoObjects.add() увеличивает итератор коллекции res.geoObjects, но разве так и должно быть?

3 комментария

так происходит потому что при смене родителя (при добавлении объекта из одной коллекции в другую) происходит удаление из текущей коллекции, в результате длина текущей коллекции меняется в процессе ее перебора и это приводит к такому эффекту

Чтобы добавить объекты коллекции на карту просто добавь всю коллекцию на карту

 

ymaps.geoXml.load(url).then(function (res) {

    myMap.geoObjects.add(res.geoObjects);

});

Спасибо! Но таким образом они попадают в geoObjects как коллекция и для того чтобы добраться до конечного объекта приходится выполнять такие действия:

 

myMap.geoObjects.each(function(collection){

    collection.each(function(obj){

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

    })

})

 

 Может быть есть белее красивые способы добраться до конечных объектов?

Вообще ты можешь сохранить ссылку на эту группу и работать с ее элементами через нее. Пожалуй так будет правильнее, ведь в myMap.geoObjects могут быть и другие геообъекты.

Но если всё же ты хочешь переложить их, можно например это сделать так:

 

ymaps.geoXml.load(url).then(function (res) {

    var geoObject;

    while(geoObject = res.geoObjects.get(0)) {

        myMap.geoObjects.add(geoObject);

    }

});