Клуб API Карт

Как достать данные для маршрута из XML файла?

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

Получаю в переменную данные из xml файла:

var ml = new YMaps.YMapsML('http://***.narod.ru/points.xml');


Далее делаю выборку точек по description:

YMaps.Events.observe(ml, ml.Events.Load, function () {

var objGreen = this.filter(function (objGreen) {

return objGreen.description == 'M1'

});

var objYellow = this.filter(function (objYellow) {

return objYellow.description == 'M2'

});

var groups = [

createGroup("M1", objGreen, "default#greenSmallPoint", "http://api-maps.yandex.ru/i/0.4/placemarks/pmgns.png"),

createGroup("M2", objYellow, "default#yellowSmallPoint", "http://api-maps.yandex.ru/i/0.4/placemarks/pmyws.png")

];

});

 

И вот именно по точкам из группы objGreen, с description "M1", я хочу построить маршрут.

Ни так:

var router = new YMaps.Router([objGreen]);

map.addOverlay(router);

Ни так:

var router = new YMaps.Router([groups[0]]);

map.addOverlay(router);

Не получается.


Или может, как-то можно в самом XML файле описать маршрут, по аналогии с полигонами и линиями?


Подскажите, пожалуйста, как нужно правильно написать.

5 комментариев
Александр Новиков
28 января 2016, 07:54
Вечером что-то совсем вникать не хочется... Но вот этот кусок вашего кода YMaps.Router([objGreen]) вызывает у меня подозрения. У вас вообще скрипт нормально без ошибок работает?
В этом куске я пытаюсь передать в YMaps.Router переменную с координатами из файла, у которых descritpion "M1". Тут скрипт как раз меня и не понимает. Вместо objGreen надо что-то другое писать. А что - не знаю.
Александр Новиков
28 января 2016, 07:54
В Router по спецификации должен передаваться массив точек. Вы же пытаетесь передать массив из одного элемента. Попробуйте сделать var router = new YMaps.Router(objGreen); Если не получится, то надо смотреть что делает ваша функция сreateGroup
objGreen - это массив объектов, а конструктор YMaps.Router необходимо передавать массив геоточек. Можно это сделать, например, вот так:
var geoPoints = [];

for (var i = 0; i < objGreen.length; i++) {
    geoPoints.push(objGreen[i].getGeoPoint());
}

map.addOverlay(new YMaps.Router(geoPoints));
Ура! Все заработало! Спасибо большое!