Добрый день!
Появилась такая задача: нужно получить массив всех координат сегмента (route.Segment). Для этого есть
segment.getCoordinates();
Она прекрасно работает в случае прокладки обычного автомобильного маршрута, например:
ymaps.route([
'Москва, Курский вокзал',
'Москва, Парк Горького',
'Москва, метро Сходненская'
], {
multiRoute: false,
routingMode: 'auto',
mapStateAutoApply: true
}).done(function (route) {
myMap.geoObjects.add(route);
var way, segments;
for (var i = 0; i < route.getPaths().getLength(); i++) {
way = route.getPaths().get(i);
segments = way.getSegments();
for (var j = 0; j < segments.length; j++) {
var coords = segments[j].getCoordinates();
console.log('coords', coords);
}
}
}, function (error) {
alert(error.message);
});
Но если указать мультимаршрут и тип: транспорт, то работать эта конструкция перестает. При этом, по-идее, должен добавиться перебор маршрутов или выбор первого из списка, см. ниже.
Если попробовать применить .getPaths() прямо к результату .route, то такого метода там не находится. В случае с перечислением маршрутов — просто не работает, ошибок никаких не выдает.
Собственно:
ymaps.route([
'Москва, Курский вокзал',
'Москва, Парк Горького',
'Москва, метро Сходненская'
], {
multiRoute: true,
routingMode: 'masstransit',
mapStateAutoApply: true
}).done(function (myRoute) {
myMap.geoObjects.add(myRoute);
var way, segments;
myRoute.getRoutes().each(function (route) {
//console.log('myroute', myRoute);
console.log('route', route);
for (var i = 0; i < route.getPaths().getLength(); i++) {
way = route.getPaths().get(i);
segments = way.getSegments();
for (var j = 0; j < segments.length; j++) {
var coords = segments[j].getCoordinates();
console.log('coords ' + i + ' and ' + j, coords);
}
}
});
}, function (error) {
alert(error.message);
});
Если убрать перебор forEach() для маршрутов и убрать параметр multiRoute, то перестает работать routingMode: 'masstransit' (по мануалу multiRoute должен быть указан как true).
Собственно, есть ли возможности подружить методы route.Segment, такие как .getIndex(), .getCoordinates() и прочие в случае мультимаршрута? Кто сталкивался?
upd: Решено:
var route = routes.getRoutes().get(0);
for (var i = 0; i < route.getPaths().getLength(); i++) {
way = route.getPaths().get(i);
way.properties.getAll().coordinates);
segments = way.getSegments();
for (var j = 0; j < segments.getLength(); j++) {
console.log('segmenr', segments.get(j).geometry.getCoordinates());
}
}