Клуб API Карт

Найдено на тему «GeoQueryResult»:
Определение меток попадающих в видимую область карты и получение их 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
Добавление GeoQueryResult в ObjectManager
Alexander
16 марта 2017, 21:35

Можно ли как-то GeoQueryResult, полученный в результате myObjects.search(***), добавить в ObjectManager? Почти весь функционал построен на ObjectManager, и теперь не могу из-за этого седлать элементарные выборки по объектам на карте.

Если такое невозможно, можете хотябы подсказать, как удалить объекты (например маркеры) после того, как они были добавлены на карту?

function searchFunc()
{
var res =  new ymaps.GeoQueryResult();
window.myObjects = ymaps.geoQuery(myPlacemark);
//myPlacemark - строка с json-описаниями геометрии
					
res = myObjects.search('options.preset = "islands#greenDotIcon"');
			
/*
Здесь нужно как-то удалять то, что было добавлено на карту в результате предыдущего выполнения функции searchFunc().
*/
			
res.addToMap(myMap);
}

5 комментариев
GeoQueryResult,ObjectManager
getClosestTo() - как получить три ближайших объекта
xpaco
7 октября 2016, 09:56

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

Можно ли как то получить более чем один ближайший объект в GeoQueryResult.getClosestTo() ?

Спасибо, что помогаете.

4 комментария
GeoQueryResult,getClosestTo,Объекты