Клуб API Карт

Нужна помощь по задаче с кластеризацией и событиями

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

Здравствуйте! Понадобилась ваша помощь по текущей задаче.

На сайте есть карта, где выводятся пользователи, указавшие адрес в профиле. Вывод маркеров производится с помощью кластеризации. Возникла такая задача: при клике на кластер или отдельный маркер это событие нужно отловить, сделать ajax-запрос и под картой вывести дополнительную информацию о пользователях (об одном в случае с отдельным маркером, и обо всех в случаях с кластером).

Как я это понимаю? В геообъекте, соответствующему пользователю, должен скрытно хранится, например, ID пользователя, чтобы его можно было найти в базе. При раскрытии кластера, нужно пройтись по всем его геообъектам, прочесть идентификаторы пользователей и отправить запросом на сервер. В случае с отдельным маркером то же самое, только будет один идентификатор. Но, если честно, я не знаю как такое реализовать. Может будут лучше идеи.

Не знаю даже как подступиться к решению. Подскажите, кто может. Спасибо заранее.

3 комментария

Здравствуйте,

общее направление мысли верное.

Для того, чтобы слушать на кластеризаторе клик, нужно:

1. Отключить открытие балуна кластера с помощью опций - открытие балуна "съедает" клик.

2. Отключить увеличение зума по клику с помощью опций - они тоже "съедают" клик.

3. Начать слушать клик на кластеризаторе, через event.get('target') получать ссылку на кластер, на котором был клик.

4. Из полученного кластера можно взять массив входящих в него геообъектов.

cluster.peopreties.get('geoObjects')

5. Из геообъекта доставать его id и посылать запрос на сервер за данными.

 

Также нужно слушать клики на геообъектах - на случай если они не образуют кластер.

 

Можно вообще слушать клики на всех геообъектах (в том числе и на кластере) на коллекции map.geoObjects. В событии event.get('target') даст ссылку на объект, на котором был клик. Но тогда нужно как-то уметь отличать кластер от геообъекта. Можете делать проверку по наличию поля id в properties - у кластеров его не будет, а у геообъектов будет.

Большое вам спасибо за хороший развернутый ответ!

Теперь я разобрался, и все получилось как надо. А объект на котором произошел клик я определял через object.options.getName() (получается либо cluster либо geoObject).