Класс FeatureGroup в Leaflet представляет собой расширение слоя LayerGroup, предназначенное для объединения нескольких векторных объектов в единый логический контейнер с дополнительными возможностями управления стилями, событиями и геометрией. В отличие от базового LayerGroup, FeatureGroup рассматривает содержащиеся слои как набор «фич» (features), что позволяет применять к ним операции, характерные для векторной графики.
FeatureGroup наследует поведение от LayerGroup, но добавляет интерфейсы для работы с геометрическими объектами (Path layers). Это означает, что внутри группы могут находиться:
Ключевая особенность заключается в том, что FeatureGroup агрегирует не только добавление и удаление слоёв, но и их поведение:
Создание группы выполняется через конструктор
L.featureGroup():
const group = L.featureGroup();
Также возможно инициализировать группу сразу с наборами слоёв:
const group = L.featureGroup([
L.marker([51.5, -0.1]),
L.circle([51.51, -0.12], { radius: 200 }),
L.polygon([
[51.509, -0.08],
[51.503, -0.06],
[51.51, -0.047]
])
]);
После создания группа ведёт себя как обычный слой и может быть добавлена на карту:
group.addTo(map);
FeatureGroup поддерживает полный набор методов LayerGroup, расширенных семантикой работы с фичами.
group.addLayer(marker);
group.removeLayer(marker);
Удаление всех слоёв:
group.clearLayers();
group.eachLayer(function(layer) {
console.log(layer);
});
Каждый слой внутри группы обрабатывается как независимый объект, но доступ к нему централизован.
Одним из ключевых методов FeatureGroup является вычисление общей границы всех объектов.
const bounds = group.getBounds();
map.fitBounds(bounds);
Метод getBounds() возвращает объект LatLngBounds,
который охватывает все векторные элементы внутри группы.
Особенности:
FeatureGroup позволяет применять стили ко всем вложенным векторным слоям одновременно.
group.setStyle({
color: 'blue',
weight: 3,
opacity: 0.7
});
Поведение метода:
Это делает FeatureGroup удобным инструментом для тематического оформления наборов геометрии.
FeatureGroup поддерживает управление z-index для всех вложенных слоёв:
group.bringToFront();
group.bringToBack();
Действие применяется ко всем поддерживаемым слоям одновременно, что позволяет синхронизировать визуальную иерархию.
FeatureGroup агрегирует события всех вложенных слоёв. Это означает, что события клика, наведения или изменения можно обрабатывать на уровне группы.
group.on('click', function(e) {
console.log('Клик по любому объекту группы', e.layer);
});
События содержат дополнительное поле:
layer — конкретный объект, вызвавший событиеПримеры событий:
FeatureGroup часто используется как контейнер для GeoJSON-данных.
const geoLayer = L.geoJSON(data, {
style: function(feature) {
return { color: 'green' };
}
});
const group = L.featureGroup([geoLayer]);
group.addTo(map);
При этом L.GeoJSON фактически наследует поведение
FeatureGroup, что делает их тесно связанными концепциями.
FeatureGroup интегрируется с картой как единый слой:
map.addLayer(group);
map.removeLayer(group);
Преимущества такого подхода:
При добавлении слоя происходит:
Marker внутри FeatureGroup ведёт себя иначе, чем Path-объекты:
group.addLayer(L.marker([51.5, -0.09]));
Метод clearLayers() выполняет полное удаление всех
вложенных объектов:
group.clearLayers();
При этом:
FeatureGroup используется как промежуточный слой для сценариев, где требуется:
| Возможность | LayerGroup | FeatureGroup |
|---|---|---|
| Группировка слоёв | да | да |
| События | базовые | агрегированные |
| setStyle | нет | да |
| getBounds | нет | да |
| Работа с Path-слоями | ограничена | расширена |
FeatureGroup представляет собой специализированную версию LayerGroup, ориентированную на векторные данные.
FeatureGroup поддерживает добавление и удаление объектов в реальном времени:
setInterval(() => {
group.addLayer(
L.circle([51.5 + Math.random() * 0.01, -0.1], { radius: 50 })
);
}, 1000);
Все новые элементы автоматически попадают под действующие стили и обработчики.
Каждый слой можно извлекать и модифицировать:
const layer = group.getLayer(id);
group.removeLayer(id);
Это позволяет работать с FeatureGroup как с индексируемым контейнером.
FeatureGroup может содержать:
Такая вложенность позволяет строить сложные иерархии геоданных, где верхний уровень управляет поведением всей структуры.
FeatureGroup применяется в системах, где требуется:
Особенно важна возможность централизованного setStyle,
что снижает сложность управления визуальными состояниями большого
количества объектов.