Клуб API Карт

Не работает mapStateAutoApply

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

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

столкнулся с проблемой, во время постророения маршрута не работает параметр

mapStateAutoApply: true

если используется параметр 

multiRoute: true

 

Как отцентровать карту по середине маршрута и настроить zoom таким образом, чтобы весь путь влезал в область видимости?

В теме Аналог свойства mapStateAutoApply описан способ, но я сразу встал на получении сегментов(

 

function getRoute(idObject, a_coordsB, a_coordsA) {
// a_coordsB = [59.89399, 30.514692];
// a_coordsA = [59.939095, 30.315868];
    ymaps.route([a_coordsB, a_coordsA],{
            mapStateAutoApply: true,
            multiRoute: true,
            routingMode: type
            }).then(function (route) {
                mapTCI.geoObjects.add(myRoute);
                console.log(route.getSegments())
            });
}

 console.log мне ничего не выводит. Подскажите в чем причина?

Пробовал таким способом

// a_coordsB = [59.89399, 30.514692];
// a_coordsA = [59.939095, 30.315868];
mapTCI.setBounds([a_coordsA, a_coordsB], {
                    checkZoomRange: true
                });

 Но в этом случае карта зумится на минимум. Почему так происходит?

 

 

 

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

Добрый вечер. Спасибо за сообщение. То, что не работает mapStateAutoApply - наша ошибка. Чтобы ее обойти напишите так:

ymaps.route([a_coordsB, a_coordsA],{                multiRoute: true            }).then(function (route) {                route.options.set("boundsAutoApply", true);                myMap.geoObjects.add(route);            });

Дело в том, что сейчас в API одновременно существует 2 маршрутизатора. Старый и новый мультимаршрутизатор, который также умеет строить маршруты общественного транспорта. И в мультимаршрутизаторе эта опция называется по другому. 
Функция ymaps.route это хелпер, и он придерживается старого формата. Вобщем закралась ошибка при транслировании имен опций. Исправим в ближайшем релизе.

Мультимаршрут можно создавать и напрямую, минуя хелпер ymaps.route. Пример смотрите здесь  https://tech.yandex.ru/maps/doc/jsapi/2.1-dev/ref/reference/multiRouter.MultiRoute-docpage/

Также вам возможно будут полезны примеры из песочницы https://tech.yandex.ru/maps/jsbox/2.1/multiroute_driving

 

whiterabbitpushkin
27 января 2016, 23:07

Спасибо за ответ!

Буду смотреть ссылки)

whiterabbitpushkin
27 января 2016, 23:07

Подскажите еще, пожалуйста, а почему карта зумится на минимум?

Код привожу ниже:

// a_coordsB = [59.89399, 30.514692];// a_coordsA = [59.939095, 30.315868];mapTCI.setBounds([a_coordsA, a_coordsB], {                    checkZoomRange: true                });

Какую версию API вы подключаете? У меня в данный момент при подключении 2.1 такая картина https://yadi.sk/i/0Vrni32jef2tp

Т.е. все корректно, не на минимум.

whiterabbitpushkin
27 января 2016, 23:07

Использую 2.1

Я нашел проблему, у меня переменные стояли таким образом

[a_coordsB, a_coordsA],

а не 

[a_coordsA, a_coordsB]!

Попробуйте вот таким образом и увидите мою картинку

// a_coordsB = [59.89399, 30.514692];// a_coordsA = [59.939095, 30.315868];mapTCI.setBounds([a_coordsB, a_coordsA], {                    checkZoomRange: true                });

Граница должна всегда задаваться в формате [нижний_угол, верхний_угол]. В декартовой СК координаты нижнего угла должны быть меньше координат верхнего. В географической координаты нижнего угла долны быть юго-западнее координат верхнего. Дальше думаю должно быть понятно почему у вас получается нулевой масштаб )

whiterabbitpushkin
27 января 2016, 23:07

Если честно, я предполагал, что достаточно передать точки A и B, а setBounds определит какая из них верхняя, а какая нижняя)

Спасибо за объяснение!

Это невозможно. Может у вас действительно граница на весь мир?