Клуб API Карт

Не работает segment.getCoordinates()

terrabud.com.ua
8 июля 2016, 19:45

Добрый день!

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