Настройка параметров агрегации

Агрегация в Deck.gl представляет собой механизм преобразования большого массива точечных данных в структурированные пространственные представления. Вместо визуализации каждого объекта отдельно выполняется группировка по ячейкам сетки, гексагональной структуре или экранным пикселям. Это снижает нагрузку на рендеринг и позволяет выявлять плотность и распределение данных.

Ключевая идея агрегации заключается в переходе от дискретных объектов к непрерывным полям значений. В зависимости от типа слоя выполняется суммирование, усреднение или взвешивание данных внутри пространственных контейнеров.


Типы агрегационных слоёв

В Deck.gl агрегация реализуется через специализированные слои:

GridLayer Разбивает пространство на квадратную сетку фиксированного размера. Каждый тайл накапливает значения объектов, попадающих внутрь его границ.

HexagonLayer Использует гексагональную сетку, обеспечивающую более равномерное соседство ячеек и уменьшение артефактов дискретизации.

ScreenGridLayer Выполняет агрегацию в экранных координатах, где сетка фиксирована относительно пикселей, а не географических координат.

GPUGridLayer / GPUHexagonLayer Переносят вычисления агрегации на GPU, обеспечивая высокую производительность при больших объёмах данных.


Параметры пространственной дискретизации

Размер ячейки

Одним из ключевых параметров является размер ячейки агрегации:

  • для GridLayer используется cellSize
  • для HexagonLayer используется radius

Уменьшение размера ячейки увеличивает детализацию, но приводит к росту количества агрегатов и снижению производительности. Увеличение — сглаживает распределение, но скрывает локальные вариации.

В случае ScreenGridLayer используется параметр cellSizePixels, определяющий размер пиксельной сетки в экранных координатах.


Взвешивание данных

Агрегация редко ограничивается простым подсчётом точек. Почти всегда используется взвешивание через пользовательские функции:

  • getPosition — извлечение координат
  • getWeight — числовой вес объекта
getWeight: d => d.value

Если функция веса не задана, используется единичное значение, что эквивалентно подсчёту количества точек в ячейке.


Функции агрегации значений

Внутри каждой ячейки выполняется операция над наборами значений. Основные стратегии:

SUM — суммирование всех весов MEAN — среднее значение MIN / MAX — экстремальные значения COUNT — количество объектов MEDIAN (в некоторых реализациях через кастомную логику)

В слоях Deck.gl выбор стратегии задаётся через параметры:

  • aggregation (в некоторых слоях)
  • colorAggregation
  • elevationAggregation

Пример различия логики:

  • цвет может отображать среднее значение
  • высота столбца — сумму
  • насыщенность — количество объектов

Цветовая агрегация

Параметр colorAggregation определяет способ вычисления цвета ячейки:

colorAggregation: 'SUM'

Значение, полученное после агрегации, далее нормализуется через диапазон:

  • lowerPercentile
  • upperPercentile

Эти параметры ограничивают влияние выбросов, исключая крайние значения из цветовой шкалы.


Агрегация высоты

В трёхмерных представлениях используется параметр elevationAggregation, который управляет вычислением высоты столбца:

elevationAggregation: 'SUM'

Дополнительно применяется:

  • elevationScale — коэффициент масштабирования высоты
  • elevationRange — ограничение минимальной и максимальной высоты

Высота становится визуальным кодированием плотности или интенсивности данных.


Нормализация и процентильные ограничения

Для корректной визуализации распределений применяется нормализация значений. Без неё несколько аномально больших значений полностью искажают картину.

Основные параметры:

  • lowerPercentile — нижняя граница нормализации
  • upperPercentile — верхняя граница нормализации

Значения ниже или выше этих границ обрезаются, а оставшийся диапазон масштабируется линейно.

Это особенно важно при работе с финансовыми, транспортными или геосоциальными данными, где распределение часто имеет тяжёлые хвосты.


Режимы агрегации на GPU и CPU

CPU-агрегация

Выполняется на центральном процессоре. Характеризуется:

  • большей гибкостью функций
  • возможностью сложных вычислений
  • сниженной производительностью при больших объёмах данных

Используется в стандартных слоях GridLayer и HexagonLayer.


GPU-агрегация

Реализуется через шейдеры WebGL. Поддерживается в:

  • GPUGridLayer
  • GPUHexagonLayer

Особенности:

  • высокая производительность
  • параллельная обработка миллионов точек
  • ограниченная сложность пользовательской логики

В GPU-режиме функции getWeight и getPosition должны быть простыми и детерминированными.


Пространственные координаты и проекции

Агрегация зависит от системы координат. Deck.gl выполняет преобразование географических координат (longitude/latitude) в проекционные координаты.

Важные аспекты:

  • изменение масштаба карты автоматически пересчитывает агрегацию
  • при zoom-level меняется плотность ячеек
  • используется Web Mercator проекция по умолчанию

Параметры агрегации могут быть чувствительны к уровню зума:

  • фиксированный размер ячейки в метрах
  • адаптивный размер в пикселях
  • гибридные подходы

Параметры визуальной интерпретации

Агрегированные данные сами по себе являются числовым полем, которое затем визуализируется.

Основные параметры:

  • colorRange — диапазон цветов
  • coverage — степень заполнения ячейки
  • opacity — прозрачность слоя
  • material — освещение для 3D-экструзии

Пример влияния coverage:

  • низкое значение создаёт разреженную визуализацию
  • высокое значение приводит к перекрытию и плотному заполнению

Сглаживание и интерполяция

Некоторые слои поддерживают визуальное сглаживание границ между ячейками. Это уменьшает резкие переходы и создаёт эффект непрерывного поля.

Используются техники:

  • линейная интерполяция значений
  • смешивание цветов между соседними ячейками
  • масштабирование альфа-канала в зависимости от плотности

Зависимость агрегации от уровня масштаба

Одним из ключевых механизмов является масштабная адаптация:

  • при низком zoom уровне ячейки крупные, показывается глобальная структура
  • при высоком zoom уровне ячейки уменьшаются, увеличивается детализация

Параметры, влияющие на поведение:

  • radius или cellSize
  • minZoom и maxZoom
  • динамическая пересборка агрегатов при изменении viewport

Производительность агрегации

При работе с миллионами точек критичными становятся следующие аспекты:

  • минимизация вызовов getWeight
  • использование GPU-агрегации при больших объёмах
  • кеширование результатов биннинга
  • уменьшение количества пересчётов при pan/zoom

Оптимизация часто достигается за счёт:

  • упрощения функций доступа к данным
  • предварительной нормализации данных
  • ограничения диапазона зума

Комбинирование нескольких уровней агрегации

Сложные визуализации используют каскадную агрегацию:

  • первичный слой: грубая сетка (GridLayer)
  • вторичный слой: гексагональная детализация (HexagonLayer)
  • третичный слой: точечные объекты

Такой подход позволяет переключаться между уровнями детализации без потери контекста распределения данных.


Управление стабильностью результатов

При динамических данных важно обеспечить стабильность агрегации:

  • фиксированная сетка (anchored grid)
  • стабильные хеш-функции для биннинга
  • согласованное округление координат

Без этого при небольшом изменении viewport возможны скачки значений в ячейках.


Влияние типа данных на параметры агрегации

Разные типы данных требуют различных стратегий:

  • событийные данные (трафик, клики) — SUM или COUNT
  • измерения (температура, цена) — MEAN
  • экстремальные значения (риски, пики нагрузки) — MAX

Выбор параметров агрегации определяет характер итоговой визуализации и может полностью изменить интерпретацию пространственного распределения.