Клуб API Карт

Определение масштаба для коллекции точек

Пост в архиве.
vlisay
15 февраля 2011, 11:37

Есть объект GeoObjectCollection и GeoCollectionBounds. Можно ли наравне с определением центра коллекции, определять необходимый масштаб, чтобы на карту попали все точки?

12 комментариев
map.setBounds(GeoCollectionBounds);
смаштабирует карту на все точки добавленные в GeoCollectionBounds
Спасибо. Но у меня возникает еще одна проблема. Точки на карте расставляются, но центрирования все равно не происходит (хотя, если вбивать JS-код вручную, то все хорошо работает), карта появляется где-то на Атлантическом океане. Код такой:

$(document).ready(function(){
var data = new Array();
$('a.adrs').each(function(){
data.push($(this).find('strong').html());
});
var map = new YMaps.Map(YMaps.jQuery('#yandexMap')[0]);
var geocol = new YMaps.GeoObjectCollection();
var geobounds = new YMaps.GeoCollectionBounds();
for (var i=0; i
var geoobj = new YMaps.Geocoder(data[i]);
YMaps.Events.observe(geoobj, geoobj.Events.Load, function(){
if (this.found) {
var point = this.get(0).getGeoPoint();
geocol.add(this);
geobounds.add(point);
}
});
}
map.addOverlay(geocol);

map.enableScrollZoom();

var miniMap = new YMaps.MiniMap();
map.addControl(miniMap);

var zoom = new YMaps.Zoom();
map.addControl(zoom);

var typeControl = new YMaps.TypeControl(); 
map.addControl(typeControl);

var scaleLine = new YMaps.ScaleLine();
map.addControl(scaleLine);

YMaps.jQuery('#yandexMap').show();

map.setBounds(geobounds);
});


В чем может быть проблема?
В массиве data содержатся адреса вида "Москва, Варшавское шоссе, 86"
недавно уже обсуждалось похожая задача.
Проблема в том что геокодирование - процесс асинхронный.
и когда Вы делаете  map.setBounds(geobounds);
там еще нет точек
А Вы не могли бы дать ссылку на это обсуждение?
И почему возникает проблема с асинхронностью, если добавление точки в коллекцию geobounds происходит по событию Events.Load? Ведь объект в geocol добавляется нормально.
карту масштабировать надо только после добавления всех точек в GeoCollectionBounds
а разве Event.Load не гарантирует то, что результат уже получен?
гарантирует
С добавлением точек в GeoCollectionBounds у Вас всё в порядке.
Только делать map.setBounds надо после добавления последней точки.

А лучше всего вообще не геокодировать в цикле на клиенте.
А делать это на сервере
>Только делать map.setBounds надо после добавления последней точки.
А разве у меня не так получается?
нет
map.setBounds(geobounds); произойдет раньше
чем выполнится обработчик geoobj.Events.Load