Клуб API Карт

Найдено на тему «objectState.isShown»:
Определение меток попадающих в видимую область карты и получение их ID
vikktor.com
13 октября 2017, 10:43

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

Спасибо.

7 комментариев
ObjectManager,GeoQueryResult,области видимости,objectState.isShown
objectState.isShown не точно определяет границу
Руслан Дмитриев
6 апреля 2017, 14:56

Приветствую.

При boundschange пробегаюсь по объектам в поле видимости objectState.isShown.

Все работает, но если метка или кластер на карте одна, то счетчик все равно считает что рядом стоящие метки тоже в поле зрения.
Прошу помочь, как сделать что бы метки определялись более точно, в пределах видимой области. Спасибо.

https://jsfiddle.net/RDmitriev/Ljcm1rx9/

2 комментария
boundschange,objectState.isShown