Клуб API Карт

GeoObjectCollection() + getBounds() = ?

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

Всем привет,


судя по описанию GeoObjectCollection, у него есть метод getBounds(). Казалось бы, после строчек -


var group = new YMaps.GeoObjectCollection();

...  group.add(placemark);  ... // в цикле

map.setBounds(group.getBounds())


мы должны увидеть карту map, отмасштабированную по границам точек group. А видим ошибку JavaScript'а "s is null". Что я делаю не так ?

7 комментариев
Александр Новиков
28 января 2016, 07:44
А группу вы на карту добавили? И так сложно сказать, надо бы код целиком посмотреть.
Да, конечно - группа нормально отображается на карте. Полностью как-то так :

  var placemark;
  for (var i=0; i    placemark = new YMaps.Placemark(new YMaps.GeoPoint(x, y));
   placemark.description = '......';
   group.add(placemark);
  }
map.addOverlay(group);
map.setBounds(group.getBounds());
Для нахождения bounds у группы точек воспользуйтесь классом YMaps.GeoCollectionBounds. Пример тут: http://api.yandex.ru/maps/jsapi/doc/dg/concepts/bounds.xml
Это я тоже пытался. GeoCollectionBounds принимает на вход массив GeoPoint'ов. Но есть ли у коллекции, созданной через GeoObjectCollection, прямой доступ к набору ее точек ?
Нет, прямого доступа нет.
Предположим, что в группе только метки. Собрать координаты всех меток можно, например, так:
var group = new YMaps.GeoObjectCollection().
     points = [];
group.forEach(function (obj) {
    points.push(obj.getGeoPoint());
});
GeoObjectCollection самостоятельно не производит расчетов занимаемого им bounds, т.е getBounds вернет что-то отличное от null, только если вы сами запишите туда bounds через setBounds.
поробуй через таймаут в консоле посмотреть выведет ли данный на пример:

setTimeout(function(){
myMap.setBounds(objectManager.getBounds(), {checkZoomRange:true, callback:function(){ if(myMap.getZoom() > 10) myMap.setZoom(10); } });
},2000)