S2 layer

S2 layer в Kepler.gl реализует пространственную агрегацию на основе иерархической системы разбиения поверхности Земли, известной как S2 Geometry. В отличие от классических подходов кластеризации точек или фиксированных географических сеток, слой использует геометрически строгую структуру, основанную на проекции сферы на куб и дальнейшей рекурсивной декомпозиции его граней.

S2 Geometry строится на отображении сферы на шесть граней куба с последующей рекурсивной тесселяцией каждой грани. Каждая ячейка в системе имеет уникальный идентификатор (S2 Cell ID), который кодирует:

  • положение на поверхности Земли
  • уровень детализации (resolution level)
  • иерархическую принадлежность к родительским и дочерним клеткам

Фундаментальное свойство системы — иерархическая локальность: дочерние клетки всегда полностью содержатся в родительской, что позволяет эффективно выполнять агрегацию без пересечений и неоднозначностей.

Иерархия клеток и уровни разрешения

Каждый уровень S2 определяет плотность покрытия:

  • низкие уровни (0–5) — крупные области, континентальный масштаб
  • средние уровни (6–10) — региональные сегменты
  • высокие уровни (11–16+) — городская детализация

Каждое увеличение уровня примерно в 4 раза увеличивает количество ячеек, уменьшая их площадь.

Ключевое свойство:

  • каждая точка пространства может быть однозначно отображена в S2 Cell ID
  • один и тот же набор данных может быть агрегирован на разных уровнях без изменения исходных координат

S2 слой в Kepler.gl: концептуальная модель

S2 layer реализует пространственную агрегацию точечных данных в ячейки S2 и визуализирует их как полигональные или гексаподобные элементы (в зависимости от проекции и стиля рендера).

Основные задачи слоя:

  • группировка точек в S2 ячейки
  • вычисление агрегированных метрик (count, sum, avg и др.)
  • визуализация плотности распределения
  • обеспечение интерактивного зума без пересчёта исходных данных

Внутренне слой работает как промежуточный агрегатор между raw dataset и WebGL рендерингом.

Конфигурация слоя

S2 layer в Kepler.gl задаётся через описание слоя в state-конфигурации:

  • тип слоя: s2
  • источник данных: dataset с координатами (latitude, longitude)
  • уровень разрешения: resolution
  • агрегируемые поля: числовые и категориальные атрибуты

Типичная структура конфигурации слоя:

  • dataId — идентификатор датасета
  • label — отображаемое имя слоя
  • columns — привязка координат
  • visualChannels — визуальные каналы (цвет, высота, радиус)
  • aggregation — метод агрегации

Агрегация данных

Процесс агрегации включает несколько этапов:

1. Преобразование координат

Каждая точка (lat, lon) преобразуется в S2 Cell ID заданного уровня.

2. Группировка

Точки с одинаковым Cell ID объединяются в одну группу.

3. Вычисление статистик

Для каждой ячейки рассчитываются агрегированные значения:

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

4. Генерация геометрии

Каждая S2 ячейка преобразуется в полигон для отрисовки.

Визуальные каналы слоя

S2 layer использует стандартную модель визуальных каналов Kepler.gl:

  • fillColor — цвет ячейки на основе плотности или метрики
  • strokeColor — границы ячеек
  • elevationScale — высота экструдированной ячейки
  • coverage — степень заполнения полигона
  • size — масштаб визуального представления

Цветовая интерполяция часто используется для отображения плотности распределения данных, создавая тепловые карты поверх S2 сетки.

Производительность и оптимизация

S2 слой проектируется для работы с большими наборами данных (миллионы точек). Основные оптимизационные механизмы:

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

S2 Cell ID позволяет выполнять группировку за O(n) без сложных пространственных запросов.

Кэширование агрегации

Результаты агрегации сохраняются для каждого уровня разрешения, что позволяет:

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

WebGL рендеринг

Геометрия ячеек передаётся в GPU, минимизируя нагрузку на CPU при визуализации.

Сравнение с H3 layer

В Kepler.gl альтернативой S2 layer является H3 layer (Uber H3 grid system). Основные различия:

Геометрия

  • S2: основан на кубической проекции сферы
  • H3: использует шестиугольную сетку

Иерархия

  • S2: строгая квадродеревообразная иерархия
  • H3: иерархия через hexagon indexing

Деформации

  • S2: минимальные на малых масштабах, но квадро-подобные ячейки
  • H3: более равномерные по площади шестиугольники

Применение

  • S2: лучше подходит для строгих геоиндексов и серверных расчётов
  • H3: чаще используется для визуальной аналитики плотности

Поведение при масштабировании

S2 layer динамически адаптируется к zoom level:

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

Это поведение обеспечивается переходом между уровнями S2 resolution без пересчёта исходного датасета.

Работа с атрибутивными данными

Помимо геометрии, S2 layer поддерживает агрегацию атрибутов:

  • числовые поля (sales, population, temperature)
  • категориальные поля (type, region)
  • временные метки (через предварительную агрегацию)

Типовые операции:

  • sum aggregation для суммарных показателей
  • avg aggregation для средних значений
  • count aggregation для плотности объектов

Интероперабельность с другими слоями

S2 layer часто используется совместно с:

  • point layer (исходные точки поверх агрегатов)
  • arc layer (потоки между S2 ячейками)
  • heatmap layer (сравнительная визуализация плотности)

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

Практическое значение и аналитические сценарии

S2 layer применяется в задачах:

  • анализ плотности пользователей по регионам
  • визуализация логистических потоков
  • мониторинг событий в реальном времени
  • агрегация IoT-данных по геозонам
  • построение multi-resolution heatmaps

Ключевое преимущество заключается в стабильности пространственного разбиения: одни и те же координаты всегда попадают в одни и те же ячейки при одинаковом уровне resolution, что критично для аналитических систем и кэширования.

Внутренняя модель данных слоя

Внутренне слой хранит данные в виде структуры:

  • cellId → aggregatedFeature

  • aggregatedFeature включает:

    • geometry (polygon)
    • metrics (count, sum, avg)
    • visual properties

Такая структура позволяет эффективно сериализовать состояние слоя в Redux store Kepler.gl и восстанавливать его без повторной обработки исходных данных.