Группировка объектов
Однотипные объекты-оверлеи можно объединить в группу, а затем оперировать этой группой как единым целым: отображать/скрывать объекты, одновременно производить действия над всеми членами группы, и т. д.
Для совершения действий над группой объектов используйте методы класса YMaps.GeoObjectCollection. Ниже приведены примеры основных действий:
- Создание группы
- Добавление и удаление объекта из группы
- Подсчет количества объектов в группе
- Доступ к отдельным объектам группы
- Вызов пользовательской функции для объектов группы
- Задание стиля для группы объектов
Пример ниже демонстрирует использование методов YMaps.GeoObjectCollection. Пример добавляет на карту Москвы несколько перетаскиваемых меток. При перемещении метки за пределы МКАД (обозначена с помощью многоугольника), метка удаляется с карты.
Создание группы
В примере показано, как создать группу из 10 меток и добавить ее на карту одной командой:
var bounds = map.getBounds(),
pointLb = bounds.getLeftBottom(),
span = bounds.getSpan();
var gCollection = new YMaps.GeoObjectCollection();
for (var i = 0; i < 10; i++) {
var point = new YMaps.GeoPoint(pointLb.getLng() + span.x * Math.random(),
pointLb.getLat() + span.y * Math.random());
var placemark = new YMaps.Placemark(point);
gCollection.add(placemark);
}
map.addOverlay(gCollection);
Узнайте больше
Добавление и удаление объекта из группы
Чтобы добавить объект (или массив объектов) в группу используйте метод add():
// Добавляет одиночный объект в группу
gCollection.add(new YMaps.Placemark(new YMaps.GeoPoint(37.554265,55.71554)));
// Добавляет массив объектов в группу
gCollection.add([
new YMaps.Placemark(new YMaps.GeoPoint(37.518234,55.708937)),
new YMaps.Placemark(new YMaps.GeoPoint(37.514146,55.722294))
]);
Чтобы удалить объекты из группы используйте метод remove():
var placemark = new YMaps.Placemark(new YMaps.GeoPoint(37.554265,55.71554));
// Добавляет объект в группу
gCollection.add(placemark);
// Удаляет объекта из группы
gCollection.remove(placemark);
Подсчет количества объектов в группе
Чтобы узнать общее количество объектов в группе, вызовите метод length().
var length = gCollection.length();
Доступ к отдельным объектам группы
Используйте методы get() (возвращает объект из группы по его индексу) и filter() (возвращает массив объектов, удовлетворяющих некоторому условию).
gCollection.get(0) // Первый объект
gCollection.get(5) // Шестой объект
gCollection.get(-1) // Последний объект
gCollection.get(-3) // Третий объект с конца
// Осуществляет рекурсивный отбор объектов с заданным значением свойства
var filteredObj =
gCollection.filter(function (obj) {
return obj.property == "filter";
});
Вызов пользовательской функции для объектов группы
Чтобы выполнить какие-либо действия над всеми элементами группы, используйте метод forEach(). Метод позволяет вызвать указанную пользовательскую функцию для каждого объекта группы.
gCollection.forEach(function (obj, objIndex, group) {
// Набор действий
});
Задание стиля для группы объектов
Чтобы задать единый стиль всем элементам группы, передайте ключ (или указатель) стиля в качестве параметра в конструктор класса YMaps.GeoObjectCollection. Указанный стиль будет автоматически применен ко всем объектам группы, например:
var gCollection = new YMaps.GeoObjectCollection("default#greenPoint");
Стиль группы имеет более низкий приоритет, чем стиль объекта, входящего в группу.
// Устанавливает зеленый значок в качестве стиля группы меток
var gCollection = new YMaps.GeoObjectCollection("default#greenPoint");
gCollection.add([
// У этой метки установлен индивидуальный стиль (красный значок),
// являющийся более приоритетным, чем стиль группы
// Соответственно, метка отобразится красным значком
new YMaps.Placemark(new YMaps.GeoPoint(37.518234,55.708937), {style: "default#redPoint"}),
new YMaps.Placemark(new YMaps.GeoPoint(37.514146,55.722294))
]);