S2 layer в Kepler.gl реализует пространственную агрегацию на основе иерархической системы разбиения поверхности Земли, известной как S2 Geometry. В отличие от классических подходов кластеризации точек или фиксированных географических сеток, слой использует геометрически строгую структуру, основанную на проекции сферы на куб и дальнейшей рекурсивной декомпозиции его граней.
S2 Geometry строится на отображении сферы на шесть граней куба с последующей рекурсивной тесселяцией каждой грани. Каждая ячейка в системе имеет уникальный идентификатор (S2 Cell ID), который кодирует:
Фундаментальное свойство системы — иерархическая локальность: дочерние клетки всегда полностью содержатся в родительской, что позволяет эффективно выполнять агрегацию без пересечений и неоднозначностей.
Каждый уровень S2 определяет плотность покрытия:
Каждое увеличение уровня примерно в 4 раза увеличивает количество ячеек, уменьшая их площадь.
Ключевое свойство:
S2 layer реализует пространственную агрегацию точечных данных в ячейки S2 и визуализирует их как полигональные или гексаподобные элементы (в зависимости от проекции и стиля рендера).
Основные задачи слоя:
Внутренне слой работает как промежуточный агрегатор между raw dataset и WebGL рендерингом.
S2 layer в Kepler.gl задаётся через описание слоя в state-конфигурации:
s2resolutionТипичная структура конфигурации слоя:
dataId — идентификатор датасетаlabel — отображаемое имя слояcolumns — привязка координатvisualChannels — визуальные каналы (цвет, высота,
радиус)aggregation — метод агрегацииПроцесс агрегации включает несколько этапов:
Каждая точка (lat, lon) преобразуется в S2 Cell ID заданного уровня.
Точки с одинаковым Cell ID объединяются в одну группу.
Для каждой ячейки рассчитываются агрегированные значения:
Каждая S2 ячейка преобразуется в полигон для отрисовки.
S2 layer использует стандартную модель визуальных каналов Kepler.gl:
Цветовая интерполяция часто используется для отображения плотности распределения данных, создавая тепловые карты поверх S2 сетки.
S2 слой проектируется для работы с большими наборами данных (миллионы точек). Основные оптимизационные механизмы:
S2 Cell ID позволяет выполнять группировку за O(n) без сложных пространственных запросов.
Результаты агрегации сохраняются для каждого уровня разрешения, что позволяет:
Геометрия ячеек передаётся в GPU, минимизируя нагрузку на CPU при визуализации.
В Kepler.gl альтернативой S2 layer является H3 layer (Uber H3 grid system). Основные различия:
S2 layer динамически адаптируется к zoom level:
Это поведение обеспечивается переходом между уровнями S2 resolution без пересчёта исходного датасета.
Помимо геометрии, S2 layer поддерживает агрегацию атрибутов:
Типовые операции:
S2 layer часто используется совместно с:
Такое комбинирование позволяет переходить от макроуровня к микроуровню анализа без смены датасета.
S2 layer применяется в задачах:
Ключевое преимущество заключается в стабильности пространственного разбиения: одни и те же координаты всегда попадают в одни и те же ячейки при одинаковом уровне resolution, что критично для аналитических систем и кэширования.
Внутренне слой хранит данные в виде структуры:
cellId → aggregatedFeature
aggregatedFeature включает:
Такая структура позволяет эффективно сериализовать состояние слоя в Redux store Kepler.gl и восстанавливать его без повторной обработки исходных данных.