Клуб API Карт

Не очищается слой, задаваемый LoadingObjectManager

as-popov
18 мая 2016, 19:00

Добрый день!

Карта содержит множество полигональных объектов, поэтому, для того, чтобы отрисовка не тормозила в мелких масштабах, хочется сделать следующее:

Для мелких масштабов отдавать точечные объекты с кластеризацией

Для крупных масштабов отдавать полигональные объекты.

Регистрирую два загрузчика объектов для точек и полигонов:

var loadingObjectManagerPoints = new ymaps.LoadingObjectManager(ext_ip + '/home/mappoints?bbox=%b&zoom=%z', { clusterize: true });

var loadingObjectManager = new ymaps.RemoteObjectManager(ext_ip + '/home/map?bbox=%b&zoom=%z');
    myMap.geoObjects.add(loadingObjectManagerPoints);
    myMap.geoObjects.add(loadingObjectManager);

 При ответе сервера, если zoom не соответствует данному типу загрузчика возвращаю данные в виде

{ "error": "no data",
  "data": null
}

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

Ссылка на тестовый пример: 

https://gosuslugi.geosys.ru:2003/AspTest

Если же в клиентской части вместо LoadingObjectManager для точечных объектов использовать RemoteObjectManager

var loadingObjectManagerPoints = new ymaps.RemoteObjectManager(ext_ip + '/home/mappoints?bbox=%b&zoom=%z');

Все будет работать правильно, но, естественно, без кластеризации.

2 комментария
Подписаться на комментарии к посту
`LoadingObjectManager` не перезапрашивает данные при смене зума, только дозапрашивает данные для новых тайлов. Есть метод `reloadData`, который можно вызывать в обработчике события `boundschange`, либо можно скрывать/показывать объекты в зависимости от зума. Возможно, есть решение получше...
Monte Kristo,
 спасибо! reloadData() в boundschange помогло.