Может подскажите в правильном ли я направлении двигаюсь?
Сейчас получилось сделать фильтрацию через RemoteObjectManager.objects.each(...), где вызваю функцию-фильтр, кот. использует removeFromMap() и addToMap() объекта-оверлея, соответственно для скрытия и показа по условию.
И в этом месте не могу найти, как определить показывается или нет оверлей: сейчас просто вызываю addToMap(), даже если оверлей и так показывается.
UPD:
Проверил: вызов addToMap() для отображаемых оверлеев приводит к созданию "висящих" дубликатов.
Вообще, по-хорошему, в RemoteObjectManager данные должны на сервере формироваться, т.е. фильтр включается в URL тайла, иначе возможны разные артефакты кластеризации.
Не согласен, т.к. в этом случае нужно будет отправлять запросы к серверу и ждать ответа на каждое изменения фильтра. Тут же осложняется ситуация с кэшированием ответов на сервере в виду большого кол-ва вариантов фильтра.
Для RemoteObjectManager кластера с сервера могут приходить просто в виде центр кластера + число меток. Как клиент может отфильтровать метки в кластере, если он про них ничего не знает?
Человек не делает на сервере кластеризацию, он просто показывает разных набор меток в зависимости от зума. При этом метки могут быть трех типов - кафе, аптека, бар.
И хочет, чтобы на карте был список чекбоксов-переключалок, чтобы можно было быстро показать только объекты из выбранной категории.
1. вы сохраняете где-то срез объектов, хранящихся в ROM.objects
2. Фильтруете метки и удаляете ненужные прямо из коллекции objects
Единственный тонкий момент - загрузка новых данных, если включен фильтр.
Нужно тогда после фильтрации слушать событие add на ROM.objects, и если очередная метка попадает под фильтрацию, запоминать ее во внешнем хранилище и удалять из коллекции objects.
Оперируйте методом setMap у оверлеев, методы removeFromMap и addToMap - это хелперы, которые не заявлены в интерфейсе. Вызов этих методов напрямую может вызвать разные интересные эффекты)