Решаю задачу с определением меток попадающих в видимую область карты. При изменении масштаба карты, мне надо обновлять список на список состоящий только из объектов которые видны на карте. Для создания меток использую 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? Или может есть другой более правильый вариант?
Спасибо.