Клуб API Карт

Как получить видимые на карте объекты из ObjectManager? api 2.1

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

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

Применяю setFilter, объекты, которые не подходят под фильтр скрываются.

Подскажите, как получить все видимые объекты на карте?

8 комментариев

1. Можно взять массив всех объектов, для каждого запросить состояние через getObjectState и проверить поле isFilteredOut

2. Можно перебрать оверлеи объектов - оверлеи будут созданы только для объектов, которые реально добавлены на карту

 

В будущих релизах подумаем, как решать этот кейс более изящно

whiterabbitpushkin
27 января 2016, 23:06

Спасибо за ответ!

whiterabbitpushkin
27 января 2016, 23:06

Ответьте еще на несколько вопросов, пожалуйста)

Вот таким образом я получаю объекты, которые в области видимости карты

ymaps.geoQuery(objectManager.objects).searchIntersect(map).each(function(object) {

});

1. Как запросить состояние через getObjectState для объектов ObjectManager?

Нашел пример для кластеров. Попытался сделать по аналогии, ничего не получилось.

Код привожу ниже

ymaps.geoQuery(objectManager.objects).searchIntersect(map).each(function(object) {

    console.log(objectManager.getObjectState(objectManager.objects.getById(object.properties.get('id'))))

});

2. Как правильно получить оверлеи?

Вывожу оверлеи таким образом

ymaps.geoQuery(objectManager.objects).searchIntersect(mapTCI).each(function(object) {

    console.log(object.getOverlay())

});

Результат - объект со значением свойства

Error: GeoObject wasn't added to map 

Видимо, делаю что-то не так, примера нет(

 

На данный момент ObjectManager не очень совместим с geoQuery(

То есть geoQuery может принять на вход описания объектов из ObjectManager, но он по факту создает новые объекты типа ymaps.GeoObject и дальше оперирует ими

Правильнее будет взять видимую область карты через getBounds, и потом понять, какие объекты попадают в эту область просто используя max/min

 

По поводу п. 2. Вам надо получить оверлеи объектов, которые сгенерировал ObjectManager, а вы работаете там по сути с объектами, которые внутри себя сгенерировал geoQuery

 

Получить все оверлеи ObjectManager можно так

objectManager.objects.overlays.getAll()

whiterabbitpushkin
27 января 2016, 23:06

Понял, спасибо)

whiterabbitpushkin
27 января 2016, 23:06

Нет, не все понял)

А как получить getObjectState для объекта ObjectManager?

Я нашел только для Clusterer

Добрый день, решения ли данная возможность "более изящно" или крутим цикл по объектам?