Клуб API Карт

Неадекватность getMapZoom ?

Кащук Павел
20 января 2010, 13:04

Написал более-менее универсальный скрипт, в котором на первом этапе создается массив dots:

var dots=new Array();

потом в него загонятеся от 1 до 100 точек:

dots[i]=new YMaps.GeoPoint(x,y);

Далее, имея этот массив, нужно сгенерировать карту, сфокусированную на этой группе точек. Делаю это так:

if(dots.length){
  var bounds=new YMaps.GeoCollectionBounds(dots);
  var zoom=bounds.getMapZoom(map);
  map.setCenter(bounds.getCenter(map),zoom);
 }

Так вот здесь значение zoom определяется как-то неадекватно:

1. Когда точка всего одна то все ок:

http://www.infocar.ua/servis_hyundai.html (смотрите карту внизу страницы)

2. Когда точек больше, то bounds.getMapZoom(map) возвращает 0:

http://www.infocar.ua/servis_mazda.html (смотрите карту внизу страницы)

 

Для наглядности значения zoom, а также - массив dots, вывожу перед картой красным цветом. Сам код есть в исходном HTML страницы.

Буду МЕГА-благодарен за решение или даже за констатацию нерешимости проблемы :)

 

3 комментария
Подписаться на комментарии к посту
А зачем такое извращение? У карты есть замечательный метод: setBounds http://api.yandex.ru/maps/jsapi/doc/ref/reference/map.xml#setBounds Он сделает все за вас :)
Кащук Павел
20 января 2010, 13:35

Спасибо, этот метод работает отлично. Но вопрос остается открытым, так как нужно также вычислять значение zoom

Я написал небольшой код:
// Массив точек
var points = [
    new YMaps.GeoPoint(30.537105,50.405269),
    new YMaps.GeoPoint(35.033326,48.408582)
];

// Добавление меток на карту
for (var i = 0; i < points.length; i++) {
    map.addOverlay(new YMaps.Placemark(points[i]));
}

var bounds = new YMaps.GeoCollectionBounds(points);
map.setBounds(bounds);
console.log(bounds.getMapZoom(map));
Получил значение масштаба = 7. Ваш код тоже вернул масштаб = 7.