Клуб API Карт

Проблема с util.bounds.getCenterAndZoom

Walter White
16 января 2013, 14:08

Использую util.bounds.getCenterAndZoom для получения масштаба и центра карты. Передаю массив координат и значение ширины и высоты карты. Почему я получают масштаб "мир" ? 

Скриншот 

Код:

 

var w = $('#map').width(), h = $('#map').height();
var centerAndZoom = ymaps.util.bounds.getCenterAndZoom(coords,[w, h]);
12 комментариев
Подписаться на комментарии к посту
Нужно передавать не координаты, а пару координат (углы карты).

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

Массив coords должен содержать координаты двух точек - левый верхний угол области и правый нижний угол.

То есть нужно из вашего массива взять первые 2 точки и переставить их местами - тогда получится ненулевой зум.

var coords = [

            [58.009129, 56.201182],

            [58.007408, 56.208647]

        ];

        var centerAndZoom = ym.util.bounds.getCenterAndZoom(coords, map.container.getSize());

Почему нужно передавать только две точки ?

Чтобы задать прямоугольную область достаточно двух точек.

Хм.. и как мне узнать где в моём массиве координаты с самым левым верхним углом и самым нижним правым углом ?

var minLat maxLat, minLong, maxLong;

minLat = maxLat = coords[0][0];

minLong = maxLong = coords[0][1];

for (var i = 1, l = coords.length; i < l; i++) {

    minLat = Math.min(minLat, coords[i][0]);

    maxLat = Math.max(maxLat, coords[i][0]);

    minLong = Math.min(minLong, coords[i][1]);

    maxLong = Math.max(maxLong, coords[i][1]);

}

var centerAndZoom = ymaps.util.bounds(

        [[maxLat, minLong], [minLat, maxLong]],

        map.container.getSize()

    );

Спасибо вам большое.

Надо понимать что эта совсем простая реализация не будет работать если точки будут вокруг Берингова пролива. И чтобы сделать все честно лучше добавить все геообъекты на карту и спросить у нее размер видимой области

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

Спас мой мозг. Спасибо.

dimik,
Спасибо тебе! В АПИ не смог найти такую команду. Перерыл весь инет...