Добрый день!
Появилась такая задача: нужно получить массив всех координат сегмента (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()); } }