Диспетчер объектов

Диспетчер объектов YMaps.ObjectManager предназначен для управления видимостью объектов-оверлеев на карте. Он позволяет показывать или скрывать объекты на карте в зависимости от текущего коэффициента масштабирования и видимой области карты. Диспетчер способен одновременно управлять большим количеством объектов, обеспечивая при этом приемлемую производительность.

Принцип работы диспетчера: карта мира покрывается виртуальной сеткой с квадратными ячейками заданного размера. Объекты, которыми управляет YMaps.ObjectManager, попадают в ячейки, соответствующие их положению на карте. При перетаскивании карты и/или смене масштаба отображаются только объекты из тех ячеек, которые оказываются в пределах текущей видимой области карты. Объекты из остальных ячеек скрываются.

Внимание

Для корректной работы диспетчера, управляемые им объекты должны добавляться на карту только с помощью метода диспетчера add().

Чтобы создать диспетчер объектов, используйте конструктор класса YMaps.ObjectManager(). Полученный объект добавьте на карту как объект-оверлей:

var objManager = new YMaps.ObjectManager();
map.addOverlay(objManager);

Чтобы добавить или удалить объекты из диспетчера используйте методы add(), remove() и removeAll().

Чтобы добавить объект в диспетчер с помощью метода add() укажите следующие параметры:

  • ссылку на добавляемый объект;
  • минимальный уровень масштабирования, на котором виден объект;
  • максимальный уровень масштабирования, на котором виден объект.

Например:

objManager.add(new YMaps.Placemark(new YMaps.GeoPoint(37.7,55.7)), 10, 12); 

Пример ниже демонстрирует работу диспетчера объектов. В зависимости от текущего коэффициента масштабирования, на карте будет показано различное количество меток разных цветов: для коэффициентов меньше восьми будет показана одна белая метка, от восьми до десяти - десять меток красного цвета, от одиннадцати и выше - сто меток фиолетового цвета. Координаты меток вычисляются с помощью генератора псевдослучайных чисел Math.random().

// Создает диспетчер объектов и добавляет его на карту
var objManager = new YMaps.ObjectManager();
map.addOverlay(objManager);

// Добавляет объекты в диспетчер
objManager.add(getPoints(1, "default#whitePoint" ), 1, 7);
objManager.add(getPoints(10, "default#redPoint" ), 8, 10);
objManager.add(getPoints(100, "default#violetPoint" ), 11, 16);

// Генерирует заданное количество меток
function getPoints(count, sKey){
    var arrPoints = [],
        bounds = map.getBounds(),
        pointLb = bounds.getLeftBottom(),
        span = bounds.getSpan();

    // Размещает метки случайным образом в текущей видимой области карты
    for (var i = 0; i < count; i++) {
        var point = new YMaps.GeoPoint(pointLb.getLng() + span.x * Math.random(),
                                       pointLb.getLat() + span.y * Math.random());
        arrPoints.push(new YMaps.Placemark(point, {style:sKey}));
    }
    return arrPoints;
}

Открыть пример в новом окне