Клуб API Карт

Пара вопросов по роутингу

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

Взял пример из песочницы, немного поменял:

 

var    multiRoute = null,

        aDotPosition = [55.750263, 37.880303],

        showDirection = function(id) {
            var aStartPosition = [
                  [55.752103, 37.859575], //
                  [55.744938, 37.864210]  //
                ],
                aStartLen = aStartPosition.length,
                aCurPos = aStartPosition[id % aStartLen];

            if(multiRoute === null) {
                multiRoute = new ymaps.multiRouter.MultiRoute({
                    referencePoints: [
                        aCurPos,
                        aDotPosition
                    ],
                    routingMode: 'masstransit',
                    params: {
                        results: 1
                    }/* ,
                    wayPointvisible: false */

                });
            }
           
            multiRoute.model.setParams({
                referencePoints: [
                    aCurPos,
                    aDotPosition
                ],
            });
        };

    ymaps.ready(init);
    var myMap;

    function init () {
        myMap = new ymaps.Map(

...
        );
...
        showDirection(1);
        myMap.geoObjects.add(multiRoute);
    }

  

Вопросы такие:

- когда я вызываю функцию showDirection(0) из кода при реакции на событие на страничке, то маршрут не перерисовывается, хотя данные в него передаются другие, а в песочнице перерисовываются ( там меняется между авто и общественным транспортом ). Что мне нужно сделать, чтобы маршрут перерисовался?

- какой параметр в new ymaps.multiRouter.MultiRoute нужно указать, чтобы не рисовались начальные и конечные точки?

- можно ли получить в читабельном виде вариант движения, как на сайте яндекс карт ( сколько пешком, какой автобус, какие остановки  )?

 

Документацию читал, но как-то разные варианты не дали результата, поэтому пришел сюда. Простите, если совсем глупые вопросы.

 

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

лучше постить ссылку на этот код.

 

Что мне нужно сделать, чтобы маршрут перерисовался?

Судя по документации referencePoints надо менять не через setParams, а через setReferencePoints

 

- какой параметр в new ymaps.multiRouter.MultiRoute нужно указать, чтобы не рисовались начальные и конечные точки?


Судя по документации опции (wayPointVisible: false) передаются во втором параметре, а не в первом

 

Обновил ваш код

 

- можно ли получить в читабельном виде вариант движения, как на сайте яндекс карт ( сколько пешком, какой автобус, какие остановки  )?

 Можно подписаться на модель, и получить из нее маршруты (см.пример)

у каждого маршрута есть поле properties с данными о расстоянии времени и т.д.

 

 

Большое спасибо.

По ссылке описание модели и там поля distance и duration - это все, что можно получить? Там нет номеров автобусов?

Спасибо за заботу о неумеющих читать, но не подскажите ли еще - где можно посмотреть все возможные варианты изображений маркеров и значков, которые появляются на картах яндекс?

Нашел стандартные случайно вот тут http://api.yandex.ru/maps/doc/jsapi/2.0/ref/reference/option.presetStorage.xml

Для версии 2.1 они в документации на 2.1

http://api.yandex.ru/maps/doc/jsapi/2.1/ref/reference/option.presetStorage.xml

 http://jsfiddle.net/0vamyqod/10/ тут поставил события на изменение состояния объекта мультироута, а ни одно из них не происходит. Что я опать не так сделал?

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

События прилепил к свойству multiRoute.model - они появились, запросов к серверу все равно не вижу ( в файербаге ).

 http://jsfiddle.net/0vamyqod/11/ вот тут попытался вывести маршруты мультироута, а мне высыпается непонятно что. Можете разъяснить, как получить отдельные маршруты?

Поставил в событие success вывод маршрутов - они получаются.

В документации:

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

Где в описании посмотреть, какие свойства и методы у единичного маршрута?

Вот тут http://jsfiddle.net/0vamyqod/12/ вывожу результирующий маршрут, в параметрах запроса стоит "masstransit", а в ответе "driving". Как такое получается?

Большое спасибо за терпение и помощь.

Дальше постараюсь сам разбираться.

Непонятно, зачем нужно было делать multiRoute.model.getRoutes(), почему multiRoute сам не модель и не имеет метода multiRoute.getRoutes() ?

Добрый вечер!
Сам multiRoute имеет метод getRoutes, но этот метод возвращает GeoObjectCollection отображений еденичных маршрутов, у каждого из которых в .model есть ссылка на соотв. модель.
multiRoute.model.getRoutes() же возвращает обычный массив тех же моделей, т.к. вы обращаетесь непосредственно в родительскую модель, а она ни о каких отображениях себя не знает.
Модель и отображение разделены, т.к. иногда требуются другие отображения, например одновременно со стандартным отображение маршрута на карте, может отображаться маршрутный лист и построен он может быть на той же самой модели.
Модель может быть создана и отдельно, без отображения. Просто для удобства тех, кому модель отдельно не нужна, можно сразу создавать отображение как основной класс, а оно внутри себя создает модель, к ней привязывается и с ней взаимодействует.