Клуб API Карт

Загрузка geoXML с помощью массива

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

Так сложилось, что мне нужно подгружать на карту несколько разных файлов.

Очень хочется этот процесс запихать в цикл:

var types = ['added','sended','planned','solved','checked','denied','all'];
var index;

for (index = 0; index < types.length; ++index) {
var type = types[index];

ymaps.geoXml.load('http://domain.org/create_' + type + '_map.php?date_befor=2014-03-01&date_after=2015-03-11&v=' + (new Date())).then(function (res) {
res.geoObjects.each(function (geoObject) {
type.push(geoObject);
});
spb_cluster.add(type);
});
}

 

Но таким образом не получается... Подскажите, это вообще возможно?

Спасибо!

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

Возможно. Можно использовать ymaps.vow.all

Александр Павлов
27 января 2016, 23:00

Не подскажете как?

Я попытался на примере:

ymaps.vow.all([

ymaps.route(['Москва, метро Смоленская', 'Москва, метро Арбатская']),

ymaps.route(['Москва, улица Крылатские холмы', 'Москва, метро Пионерская'])

]).spread(function (route1, route2) {

myMap.geoObjects.add(route1).add(route2);

ymaps.geoQuery(route1.getPaths()).add(route2.getPaths()).applyBoundsToMap(myMap);

});

Но как сюда запихать geoXml.load, не представляю :(

Он тоже возвращает промис, это стандартный интерфейс

ymaps.vow.all(

['added','sended','planned','solved','checked','denied','all'].map(function (type, index) {

    return ymaps.geoXml.load('http://domain.org/create_' + type + '_map.php?date_befor=2014-03-01&date_after=2015-03-11&v=' + Date.now());
})

).then(function (results) {

    var geoObjects = [];

    results.forEach(function (res) {

        geoObjects = geoObjects.concat(res.geoObjects.toArray());

    });

    spb_cluster.add(geoObjects);

});

Александр Павлов
27 января 2016, 23:00

Спасибо, но в данном виде тоже не заработало :(

Можно ссылку на страницу?

Александр Павлов
27 января 2016, 23:00

Я в итоге отказался от этого и сделал по простому (гружу метки в 1 и тот же массив):

var index;

      var types = ['added','sended','planned','solved','checked','denied'];

            for (index = 0; index < types.length; ++index) {

              ymaps.geoXml.load('http://domain.org/create_' + types[index] + '_map.php?date_before=' + date1 + '&date_after=' + date2 + '&v=' + (new Date())).then(function (res) {

                      res.geoObjects.each(function (geoObject) {

                        markers.push(geoObject);

                      });

              spb_cluster.add(markers);

              });

            }

 

Просто мне это было нужно для работы фильтра по типам проблем, а теперь я изменил код и при выборе нужного фильтра, просто загружаются нужные метки заново с сервера.