Агрегация в Deck.gl представляет собой механизм преобразования большого массива точечных данных в структурированные пространственные представления. Вместо визуализации каждого объекта отдельно выполняется группировка по ячейкам сетки, гексагональной структуре или экранным пикселям. Это снижает нагрузку на рендеринг и позволяет выявлять плотность и распределение данных.
Ключевая идея агрегации заключается в переходе от дискретных объектов к непрерывным полям значений. В зависимости от типа слоя выполняется суммирование, усреднение или взвешивание данных внутри пространственных контейнеров.
В Deck.gl агрегация реализуется через специализированные слои:
GridLayer Разбивает пространство на квадратную сетку фиксированного размера. Каждый тайл накапливает значения объектов, попадающих внутрь его границ.
HexagonLayer Использует гексагональную сетку, обеспечивающую более равномерное соседство ячеек и уменьшение артефактов дискретизации.
ScreenGridLayer Выполняет агрегацию в экранных координатах, где сетка фиксирована относительно пикселей, а не географических координат.
GPUGridLayer / GPUHexagonLayer Переносят вычисления агрегации на GPU, обеспечивая высокую производительность при больших объёмах данных.
Одним из ключевых параметров является размер ячейки агрегации:
GridLayer используется cellSizeHexagonLayer используется radiusУменьшение размера ячейки увеличивает детализацию, но приводит к росту количества агрегатов и снижению производительности. Увеличение — сглаживает распределение, но скрывает локальные вариации.
В случае ScreenGridLayer используется параметр
cellSizePixels, определяющий размер пиксельной сетки в
экранных координатах.
Агрегация редко ограничивается простым подсчётом точек. Почти всегда используется взвешивание через пользовательские функции:
getPosition — извлечение координатgetWeight — числовой вес объектаgetWeight: d => d.value
Если функция веса не задана, используется единичное значение, что эквивалентно подсчёту количества точек в ячейке.
Внутри каждой ячейки выполняется операция над наборами значений. Основные стратегии:
SUM — суммирование всех весов MEAN — среднее значение MIN / MAX — экстремальные значения COUNT — количество объектов MEDIAN (в некоторых реализациях через кастомную логику)
В слоях Deck.gl выбор стратегии задаётся через параметры:
aggregation (в некоторых слоях)colorAggregationelevationAggregationПример различия логики:
Параметр colorAggregation определяет способ вычисления
цвета ячейки:
colorAggregation: 'SUM'
Значение, полученное после агрегации, далее нормализуется через диапазон:
lowerPercentileupperPercentileЭти параметры ограничивают влияние выбросов, исключая крайние значения из цветовой шкалы.
В трёхмерных представлениях используется параметр
elevationAggregation, который управляет вычислением высоты
столбца:
elevationAggregation: 'SUM'
Дополнительно применяется:
elevationScale — коэффициент масштабирования
высотыelevationRange — ограничение минимальной и максимальной
высотыВысота становится визуальным кодированием плотности или интенсивности данных.
Для корректной визуализации распределений применяется нормализация значений. Без неё несколько аномально больших значений полностью искажают картину.
Основные параметры:
lowerPercentile — нижняя граница нормализацииupperPercentile — верхняя граница нормализацииЗначения ниже или выше этих границ обрезаются, а оставшийся диапазон масштабируется линейно.
Это особенно важно при работе с финансовыми, транспортными или геосоциальными данными, где распределение часто имеет тяжёлые хвосты.
Выполняется на центральном процессоре. Характеризуется:
Используется в стандартных слоях GridLayer и
HexagonLayer.
Реализуется через шейдеры WebGL. Поддерживается в:
GPUGridLayerGPUHexagonLayerОсобенности:
В GPU-режиме функции getWeight и
getPosition должны быть простыми и детерминированными.
Агрегация зависит от системы координат. Deck.gl выполняет преобразование географических координат (longitude/latitude) в проекционные координаты.
Важные аспекты:
Параметры агрегации могут быть чувствительны к уровню зума:
Агрегированные данные сами по себе являются числовым полем, которое затем визуализируется.
Основные параметры:
colorRange — диапазон цветовcoverage — степень заполнения ячейкиopacity — прозрачность слояmaterial — освещение для 3D-экструзииПример влияния coverage:
Некоторые слои поддерживают визуальное сглаживание границ между ячейками. Это уменьшает резкие переходы и создаёт эффект непрерывного поля.
Используются техники:
Одним из ключевых механизмов является масштабная адаптация:
Параметры, влияющие на поведение:
radius или cellSizeminZoom и maxZoomПри работе с миллионами точек критичными становятся следующие аспекты:
getWeightОптимизация часто достигается за счёт:
Сложные визуализации используют каскадную агрегацию:
Такой подход позволяет переключаться между уровнями детализации без потери контекста распределения данных.
При динамических данных важно обеспечить стабильность агрегации:
Без этого при небольшом изменении viewport возможны скачки значений в ячейках.
Разные типы данных требуют различных стратегий:
Выбор параметров агрегации определяет характер итоговой визуализации и может полностью изменить интерпретацию пространственного распределения.