Cluster layer представляет собой специализированный слой агрегации точечных данных, предназначенный для визуального упрощения больших наборов географических объектов. Его основная задача — объединение близко расположенных точек в кластеры с динамической декомпозицией при изменении масштаба карты. Реализация опирается на WebGL-рендеринг через deck.gl, что обеспечивает высокую производительность при работе с десятками и сотнями тысяч объектов.
Cluster layer в Kepler.gl работает на уровне трансформации входного набора данных перед отрисовкой. Исходные точки проходят этап пространственной индексации, после чего группируются по сетке или радиусу в зависимости от выбранного алгоритма кластеризации.
Ключевой принцип:
Внутренне используется подход, аналогичный grid-based clustering или k-means-like агрегации в экранных координатах.
Cluster layer ожидает табличный набор данных, где каждая запись содержит географические координаты:
Пример структуры:
[
{
"lat": 53.214,
"lng": 69.386,
"value": 10
},
{
"lat": 53.220,
"lng": 69.400,
"value": 5
}
]
Дополнительные поля участвуют в вычислении агрегированных метрик внутри кластера (сумма, среднее, максимум, количество точек).
Процесс кластеризации можно разбить на несколько этапов:
Основная особенность — кластеризация выполняется в экранных координатах, а не в географических. Это означает, что один и тот же набор данных будет давать разные кластеры при изменении zoom уровня.
Cluster layer конфигурируется через набор свойств, определяющих поведение агрегации и визуализации.
Определяет радиус кластеризации в пикселях:
radius: 40
Чем больше значение, тем агрессивнее объединение точек. Малые значения увеличивают детализацию.
Ограничивают диапазон применения кластеризации:
minZoom: 0,
maxZoom: 16
При выходе за пределы диапазона слой может переключаться в режим отображения отдельных точек.
Минимальное количество точек для формирования кластера:
minPoints: 3
Кластеры с меньшим количеством точек могут отображаться как одиночные элементы.
Определяет метод вычисления значений внутри кластера:
Cluster layer поддерживает динамическую стилизацию на основе агрегированных данных.
Размер кластера часто зависит от количества точек:
getRadius: d => Math.sqrt(d.point_count) * 5
Такой подход позволяет визуально выделять плотные области данных.
Цвет может изменяться в зависимости от плотности:
getColor: d => {
const count = d.point_count;
return count > 100 ? [255, 0, 0] : [0, 128, 255];
}
Кластеры часто отображают числовые метки:
Одной из ключевых особенностей является динамическая пересборка кластеров при изменении масштаба:
Этот механизм реализуется через реактивное пересчитывание spatial index на каждом изменении viewport.
Cluster layer в Kepler.gl не является изолированным визуальным примитивом. Он строится поверх абстракций deck.gl и может комбинироваться с другими слоями:
Типичная композиция слоёв:
layers: [
clusterLayer,
scatterLayer,
heatmapLayer
]
При этом clusterLayer часто служит агрегирующим уровнем, а scatterLayer — детализацией.
В контексте Kepler.gl слой определяется через конфигурацию dataset:
const config = {
visState: {
layers: [
{
id: 'cluster-layer',
type: 'cluster',
config: {
dataId: 'points',
radius: 50,
minZoom: 0,
maxZoom: 18,
aggregation: 'count'
}
}
]
}
}
Каждый слой привязывается к источнику данных через dataId и может иметь собственную трансформацию.
Cluster layer рассчитан на работу с большими наборами данных благодаря следующим механизмам:
При увеличении объёма данных критически важно:
Cluster layer поддерживает интерактивность:
Типичное поведение при клике:
Помимо стандартного count, часто используются кастомные вычисления:
aggregation: {
type: 'custom',
getValue: points => points.reduce((acc, p) => acc + p.value, 0)
}
Это позволяет строить аналитические карты:
Каждый кластер можно рассматривать как динамическую геометрическую сущность:
Такой подход позволяет использовать cluster layer не только для визуализации, но и для аналитики пространственных данных в реальном времени.
Cluster layer интегрирован в общую систему визуальных слоёв Kepler.gl, где каждый слой является декларативной сущностью. Это позволяет:
В результате cluster layer становится частью многослойной аналитической модели, а не отдельной визуальной функцией.