Клуб API Карт

Как открыть balloon у метки в кластеризаторе?

Пост в архиве.
MiReQ
21 мая 2012, 18:55

Задача в том, чтобы открыть балун метки извне карт, метка содержится в кластеризаторе.

Объект метки есть, объект кластеризатора есть.

myMap.setCenter();
myClusterer.refresh();
var it = myClusterer.getIterator();
var cluster = null;
while ((cluster = it.getNext()) !== null) {
    var m = cluster.getGeoObjects();
    var i;
    for(i=0; i<m.length; i++)
        if (myPlacemark == m[i]){
            cluster.balloon.open();
            // так мы открыли только балун кластера с нашей меткой
            return;
        }
}

Проблема: setCenter + cluster.refresh()
    приходится мгновенно менять центр карты (чтобы создался кластер)
И это даже не самый большой минус этого подхода.

Как это правильно делать?

P.S. Да-да, лучше бы не оформлением занимался, а гуглил
12 комментариев

Не очень понятна задача - что значит, открыть балун извне карты?

Про "извне карты" можно забыть, это в принципе не важно.
Задача в том, чтобы открыть балун кластера для определенной метки.
Проблемы:
1) если метка в кластеризаторе, у нее нет своего балуна (балун метки становится частью балуна кластера)
2) в балуне кластера через API нельзя выбрать, балун какой метки отображать.

 

3) (проблема косвенно относится к этой задаче) Кластера не существует, если он вне зоны видимой части карты.

Может вам стоит открывать балун не на метке, а на карте, и выводить в этом балуне данные нужной метки?

При открытии балуна можно центрировать карту по положению бауна.

ну... это не совсем то...
хотелось бы все-таки открывать балун кластера...

Да, максимум, что можно сделать сейчас, не переопределяя балун кластера, - это запоминать, в каком кластере какая метка, и открывать балун кластера (но опять же, будет выбрана не активная метка....).

Есть вариант создать собственный лейаут балуна кластера и там запрограммировать нужную логику.

Я поставлю себе сейчас задачу, чтобы при команде открытия балуна на метке открывался нужный балун кластера. Но никаких прогнозов относительно того, когда это выйдет в свет, делать пока не могу.

Здравствуйте. Тоесть если хочется разделить общий балун в кластере в котором хранится несколько меток - необходимо переделать балун стандартный и отлавливать количество находящихся в кластере меток, чтобы потом отловить по каждой из них инфу отдельно, что-то наподобие как тут http://www.gdeetotdom.ru/map/#lat=55.76002&lng=37.61912&m=yandex&z=14&l=39.   Я верно мыслю?

Я не очень поняла задачу. Что значит разделить общий балун в кластере?

Извините, так накрутил что и самому стало непонятно что хочу) Задача состоит в том, что нужно вытаскивать при клике на кластер (когда у него максимальный зум), значения (кординаты),каждой метки которая там находится.

Вот и вопрос: как узнать сколько там меток осталось(в кластере), и как вытаскивать инфу о них.

Чтобы поймать клик на кластере, нужно повеситься на клик на кластеризаторе. И еще запретить открывать балуны (открытие балуна "съедает" клик). Тогда в полученном событии через e.get('target') можно получить ссылку на кластер.

А уже через кластер получить массив его геообъектов - cluster.getGeoObjects()

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

Извините если снова накрутил :)

Можно делать проверку так 

if (map.getZoom() == map.zoomRange.getCurrent()[1]) {}

ок, вроде все уяснил, сегодня попробую реализовать. СПАСИБО!)