Клуб API Карт

Получить точки маршрута из Route

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

Доброго дня. У меня имеется такая проблема: мне нужно распотрошить полученный маршрут, чтобы записать все точки пути в файл так, чтобы по ним можно было построить ломанную, полностью повторяющую маршрут.

 

//Рисуем плановый маршрут

ymaps.route([

[55.702089, 37.728038],

[55.745326, 37.658221]

 ], {

 mapStateAutoApply: true

}).then(function (route) {

myMap.geoObjects.add(route);

//И записываем его на жёсткий диск

var fso=new ActiveXObject("Scripting.FileSystemObject");

var writer=fso.OpenTextFile("C:\\route.txt", 2, true);

 

//Записываем время в секундах

writer.WriteLine(route.getJamsTime());

//Записываем расстояние в метрах

writer.WriteLine(route.getLength());

//Записываем точки пути

?????

 

writer.close();

 

}, function (error) {

alert("Возникла ошибка: " + error.message);

});

// Место конца кода

 

Сразу признаюсь: я уже просматривал руководство, но, к сожалению, как решить данную проблему так и не понял. Мне бы кусочек кода. Или, хотя бы, пинок в нужную сторону. Поскольку я на Java попросту хэлловордщик, потрошить каждый вариант самостоятельно у меня уйдёт куча времени. Например, непонятны следующие моменты:

getPaths() - Возвращает коллекцию путей, из которых состоит маршрут.

Что в этих путях соджержится? Я правильно понимаю, что это именно то, что мне нужно? Массивы точек ломанной для отображения на карте?

getViaPoints() - Возвращает коллекцию транзитных точек маршрута.

getWayPoints() - Возвращает коллекцию путевых точек маршрута.

Правильно ли я понимаю, что эти методы возвращают те самые точки, которые передаются в route условием, а не те, по которым строится ломанная линия?

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

В документации есть ссылки на тип возвращаемого объекта из того же getPaths(). И можно посмотреть какие методы у него есть (это коллекция ломаных) у каждой ломаной в коллекции есть геометрия, из нее можно получить координаты.

 

Игорь Шмель
28 января 2016, 03:34

Благодарю. Значит, я правильно копал.

Такой момент: пробую перебирать ломанные методом each, но у меня выдаётся ошибка.

 

var RouteArray = route.getPaths();

RouteArray.Each(function (el, i){

    //Что-то делаем

})

 

Ругается на строку "RouteArray.Each(function (el, i)", сообщая мне, что "метод данного объекта не поддерживается".

Each с маленькой буквы

each

Игорь Шмель
28 января 2016, 03:34

О! Великолепно! А я-то думал, что я не так делаю? Всё получилось. Дальше я уже, кажется понял, что делать. Спасибо большое.

Игорь Шмель
28 января 2016, 03:34

Мда... поспешил я. А как вытащить точки из Polyline? Задавать-то просто, а вот достать их у меня что-то не получается. Я сейчас копаю в сторону геометрии, но вот только пока ничего полезного не накопал.

Игорь Шмель
28 января 2016, 03:34

Всё. нашёл. 

 

RouteArray.each(function (el, i){

 

    writer.WriteLine(el.geometry.getCoordinates());

 

})

 

Всё работает. Спасибо большое ещё раз. Очень доволен картами и их работой.

Анатолий Новоселов
28 января 2016, 03:34

А было ли найдено решение для получения упорядоченной коллекции viaPoint и wayPoint? Если я не ошибаюсь getPaths вернет все отрезки маршута и точек будет гораздо больше чем создавалось на карте.

в самом первом посте есть ссылки на методы
Анатолий Новоселов
28 января 2016, 03:34

Ваша правда, только один возвращает точки по который проложен маршрут, а другой через которые проложен маршрут, а хотелось бы получить упорядоченный массив первых и вторых.

WayPoints упорядочены по количеству путей

У ViaPoints есть методы получения индекса пути и сегмента в нем.

Анатолий Новоселов
28 января 2016, 03:34

А как же тогда получить доступ к коллекции объектов router.ViaPoints? router.getViaPoints() возвращает geoObjectArray.

var via = route.getViaPoints()

via.each(function(el, i) {

  console.log(el.getPathIndex()) // ==> Uncaught TypeError: Object [object Object] has no method 'getPathIndex'

})

 

Да, это ошибка в АПИ.
Спасибо, будем исправлять