Решаю задачу с определением меток попадающих в видимую область карты. При изменении масштаба карты, мне надо обновлять список на список состоящий только из объектов которые видны на карте. Для создания меток использую ObjectManager (с кластеризацией)
Получить объекты я могу 2-мя способами, но у обоих пока есть недостатки, которые не позволяют верно решить задачу.
Вариант 1.
// Определение объектов попадающих в видимую область карты myMap.events.add(['boundschange','datachange','objecttypeschange'], function(e){ ymaps.geoQuery(objectManager.objects).searchInside(myMap).each(function (object) { console.log(object); }); });
В этом варианте проблема в том, что geoQuery корректно отдает список меток в видимой области, но я не могу получить ID метки, который я назначал про создании списка objectManager.objects, чтобы потом сравнить со своим списком материалов из базы данных. ID метки у меня совпадает с ID материалов.
Вариант 2.
// Определение объектов попадающих в видимую область карты myMap.events.add(['boundschange','datachange','objecttypeschange'], function(e){ objectManager.objects.each(function (object) { var objectState = objectManager.getObjectState(object.id); if (objectState.isShown) { console.log(object.id); } }); });
Во этом варианте я могу получить список ID видимой области, но есть другая проблема. В видимую область попадают также объекты, которые на самом деле в видимой области не видны, но находятся где-то рядом, что неправильно. Приложил скриншот.
Подскажите пожалуйста, как правильно получить назначенные при создании массива объектов ID? Либо как правильно заставить работать isShown? Или может есть другой более правильый вариант?
Спасибо.