Клуб API Карт

Как получить длину одного из маршрутов мультимаршрута?

YATITTYTWISTER
11 октября 2014, 19:05

Здравствуйте!

Помогите пожалуйста разобраться.

 

var multiRoute = new ymaps.multiRouter.MultiRoute({...}); //Создание мультимаршрута

var singleRoute = multiRoute.getRoutes().get(0); //Получение из него обычного маршрута под индексом '0'

singleRoute.getLength(); //Не работает. Пишет: Uncaught TypeError: undefined is not a function 


Результат не звасит от того добавлен ли мультимаршрут на карту или нет. Что не правильно?

 

Заранее спасибо.

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

судя по документации, надо слушать события модели

 

    multiRoute.model.events.add("requestsuccess", function (event) {

        console.log(multiRoute.getRoutes().get(0).properties.get('distance'));

    });

 

dimik,
Научите меня, плиз, пользоваться этой ... документацией.
Покажите мне, где именно написано, что нужно слушать события модели?
Покажите, где написано, что вообще такое модель и для чего она? Все, что написано про модель это - "Модель данных мультимаршрута." Это должно мне ВСЕ объяснить?
Я правда долго и крайне безуспешно пытаюсь представить себе логику работы АПИ и не могу, т.к. вся документация это просто словарь китайских букв. А что и как с ними делать я нигде не могу найти. 
Единственный источник реально применительной информации - это вот этот клуб. 
domter,
Если вы о справочнике, то он самый обычный. Ни хуже ни лучше справочников для других АПИ и отражает все, что вы можете получить из нейспейса ymaps.
Перед использованием справочника, обязательно надо прочесть руководство, чтобы понимать, что именно искать в справочнике =)



Если есть предложения, как сделать документацию лучше и понятнее, пишите...

Добрый вечер!
По событию requestsuccess модели, т.е. когда данные пришли с сервера, берете нужный вам маршрут и у него из данных берете дистанцию, в том виде в котором вам удобнее.

 

multiRoute.getRoutes().get(0).properties.get("distance").value

Другие поля данных описаны тут.

http://api.yandex.ru/maps/doc/jsapi/2.1/ref/reference/multiRouter.masstransit.Route.xml#properties

Спасибо, буду разбираться!

Еще раз добрый день!

Вариант с requestsuccess работает:

myRoute = new ymaps.multiRouter.MultiRoute({...});

myRoute.model.events.add("requestsuccess", function (event) {

console.log(myRoute.getRoutes().get(0).properties.get("distance").value);

});

//хотя метод getLength() так и не заработал.

Проблема в том что мне нужно создать несколько десятков маршрутов и получить их длину. Через цикл это сделать не получается так как весь цикл выполняется быстрее чем один запрос. Подскажите пожалуйста как это правильнее всего реализовать? Спасибо!

 

Проблема в том что мне нужно создать несколько десятков маршрутов и получить их длину.

Зачем? Какую задачу вы решаете? Каждое построение маршрута это отдельный http-запрос со всеми вытекающими последствиями (время, траффик, нагрузка на сервер)

Есть метка завода и от него надо рассчитать расстояние по дорогам до других объектов находящихся вокруг него. И при необходимости показать маршрут. Это проблема?

Это проблема?

Ну долбить десятками запросов в маршрутизатор с каждого клиента, это проблема и для клиента и для маршрутизатора.

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

 

Такие задачи решаются интефейсно, если пользователю нужно узнать эти расстояния, он жмет кнопку, а по умолчанию ничего не запрашивается.

 

ЗЫ:

Что касается обработки нескольких асинхронных операций, – это делается при помощи интерфейса промисов. В АПИ входит модуль vow для решения подобных задач

Так пользователь и будет жать кнопку чтобы получить эти расстояния. Просто хотелось бы не по одному а сразу несколько...

Я Вас  понял! Спасибо!

Я не знаю в API друго способа получть расстояние по дороге кроме как через маршрутизацию...