Клуб 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 комментариев

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

Удалённый пользователь
27 января 2016, 23:39

 

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

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

 

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


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

 

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

 

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

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

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

 

 

Удалённый пользователь
27 января 2016, 23:39

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

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

Удалённый пользователь
27 января 2016, 23:39

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

Удалённый пользователь
27 января 2016, 23:39

Нашел стандартные случайно вот тут 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

Удалённый пользователь
27 января 2016, 23:39

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

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

Удалённый пользователь
27 января 2016, 23:39

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

Удалённый пользователь
27 января 2016, 23:39

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

Удалённый пользователь
27 января 2016, 23:39

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

Удалённый пользователь
27 января 2016, 23:39

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

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

Где в описании посмотреть, какие свойства и методы у единичного маршрута?
Удалённый пользователь
27 января 2016, 23:39

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

Удалённый пользователь
27 января 2016, 23:39

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

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

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

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