Клуб API Карт

Центрирование и автомасштабирование карты по объектам

yaroslav.bezruchko
8 августа 2013, 14:14

Суть вопроса - строю на карте 2 маршрута. Нужно, чтбы эти маршруты поместились на карту и масштаб подобрасля максимальный, чтобы разместились все объекты марштура. 

        function init(){

            myMap = new ymaps.Map ("map", {

                center: [50.45, 30.50],

                zoom: 12,

                behaviors:['default', 'scrollZoom']

            });

 

Потом добавляю 2 маршрута:

ymaps.route([

                        'Украина, Киев, Адрес1',

                        'Київ, Адрес2',

                        'м.Київ, Алрес3',

                        'Украина, Киев, Адрес1'

                    ]).then(function (route1) {

                        myMap.geoObjects.add(route1);

                        var points = route1.getWayPoints();

                        points.options.set('preset', 'twirl#redStretchyIcon');

                        route1.options.set('strokeColor','#F008');

                        route1.options.set('strokeWidth',5);

 

                    }, function (error) {

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

                    });

 

   

ymaps.route([   'Украина, Киев, Адрес1',

                        'м.Київ, Адрес2',

                        'м.Київ, Адрес3',

                        'Украина, Киев, Адрес1'

                    ]).then(function (route2) {

                        myMap.geoObjects.add(route2);

                        var points = route2.getWayPoints();

                        points.options.set('preset', 'twirl#darkgreenIcon');

                    }, function (error) {

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

                    });

 

  

Прочитал, что вот так можно спозиционировать и масштабировать по всем объектам:

myMap.setBounds(myMap.geoObjects.getBounds())

 

Итог - не позиционирует и не масштабирует. Подскажите, пожалуйста, в чём может быть проблема?

4 комментария
Подписаться на комментарии к посту
Всеволод Шмыров
8 августа 2013, 14:33
А где происходит масштабирование ? В одном из resolve-обработчике ?
В обработчиках происходит наполнение myMap.geoObjects нужно дождаться пока оба сработают.

Вот в коде у меня так и написано, сначала инициализация карты, потом построение 2  маршрутов, а после них - масштабирование.

Или я не правильно понял вопрос?

Вы неправильно поняли как работает маршрутизатор (асинхронно), 

попробуйте вывести какой-нибудь текст в консоль там где Вы добавляете оба маршрута на карту и там где вы ее масштабируете, и посмотрите в каком порядке эти сообщения выведутся

Всеволод Шмыров
8 августа 2013, 16:47
Построение маршрута - асинхронная операция. То есть когда вы вызываете myMap.setBounds(myMap.geoObjects.getBounds()), функции, которые были переданы в then еще не сработали.

К примеру, так:

// Маршрут1
ymaps.route(...).then(function () { ... 
    way1Created = true;
    setBounds();
})
...

// Маршрут2
ymaps.route(...).then(function () { ... 
    way2Created = true;
    setBounds();
})
...

function setBounds() {
    if(way1Created && way2Created)
        myMap.setBounds(myMap.geoObjects.getBounds());
}