H3 layer

Kepler.gl реализует концепцию слоёв (layers) как фундаментальную абстракцию визуализации пространственных данных. Каждый слой представляет собой независимый визуальный модуль, который трансформирует входной набор данных в графическое представление на карте. Архитектура слоёв построена вокруг идеи декларативного описания, где конфигурация определяет поведение, а не императивный код.

Каждый слой в kepler.gl описывается объектом конфигурации, который включает тип слоя, источники данных, правила визуализации и параметры рендеринга. Основная структура слоя интегрируется в visState.layers и управляется через Redux-состояние.

Ключевые поля конфигурации слоя:

  • id — уникальный идентификатор слоя
  • type — тип визуализации
  • config — параметры отображения
  • visualChannels — маппинг данных на визуальные свойства
  • dataId — ссылка на датасет

Пример логической структуры:

{
  id: "points-layer",
  type: "point",
  config: {
    dataId: "my_dataset",
    label: "Points Layer",
    color: [255, 0, 0],
    columns: {
      lat: "latitude",
      lng: "longitude"
    }
  },
  visualChannels: {
    colorField: null,
    sizeField: null
  }
}

Архитектурная роль слоя

Слой выступает промежуточным звеном между сырыми данными и WebGL-рендерингом. Внутренний pipeline обработки включает несколько этапов:

  • извлечение данных из dataset
  • агрегация или трансформация
  • применение визуальных каналов
  • передача в рендерер (Deck.gl)

Каждый слой компилируется в один или несколько deck.gl-слоёв, что обеспечивает высокую производительность при работе с большими объёмами геоданных.

Основные типы слоёв

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

Point layer

Используется для отображения точечных объектов. Поддерживает масштабирование, окраску и динамические свойства.

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

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

Arc layer

Предназначен для визуализации связей между двумя географическими точками. Применяется для потоков, маршрутов и миграционных данных.

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

  • источник и назначение (source/target)
  • кривизна дуги
  • толщина и цвет линии

Line layer

Отображает линейные геометрии. Отличается от arc тем, что использует полилинии из набора координат.

Используется для:

  • маршрутов транспорта
  • границ объектов
  • трекинга перемещений

Hexagon layer

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

Характеристики:

  • параметр радиуса гексагона
  • агрегационные функции (count, sum, avg)
  • цветовая шкала плотности

Grid layer

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

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

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

GeoJSON layer

Позволяет отображать произвольные геометрии из GeoJSON.

Поддерживает:

  • полигоны
  • линии
  • мультигеометрии

Heatmap layer

Используется для визуализации плотности точек через тепловую карту.

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

  • радиус влияния точки
  • интенсивность
  • градиент цветов

Visual Channels и привязка данных

Каждый слой использует visual channels для преобразования атрибутов данных в визуальные свойства:

  • colorField — определяет окраску объектов
  • sizeField — влияет на размер
  • heightField — используется в 3D-слоях
  • radiusField — радиус влияния (heatmap, hexagon)

Пример привязки:

visualChannels: {
  colorField: {
    name: "population",
    type: "integer"
  },
  sizeField: {
    name: "traffic",
    type: "real"
  }
}

Связь слоя с dataset

Каждый слой обязательно связан с набором данных через dataId. Данные хранятся в visState.datasets, где каждый dataset содержит таблицу и метаданные.

Структура связи:

  • dataset → таблица данных
  • layer → ссылка на dataset
  • visualChannels → интерпретация полей dataset

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

Обработка и трансформация данных

Перед визуализацией слой может применять встроенные трансформации:

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

Эти операции выполняются на этапе подготовки данных, что снижает нагрузку на рендеринг.

Интеграция с deck.gl

Каждый слой kepler.gl транслируется в один или несколько слоёв deck.gl. Это обеспечивает:

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

Mapping между kepler.gl слоями и deck.gl слоями происходит автоматически через внутренние фабрики.

Динамическое обновление слоя

Слои являются реактивными структурами. Изменение конфигурации приводит к пересборке визуализации:

  • изменение config → пересоздание слоя
  • изменение dataset → пересчёт данных
  • изменение visualChannels → перераспределение атрибутов

Это позволяет строить интерактивные интерфейсы аналитики без ручного управления рендерингом.

Множественные слои и композиция

Система поддерживает одновременное использование нескольких слоёв над одним набором данных или разными источниками. При этом:

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

Композиция используется для создания сложных визуализаций: например, heatmap + point layer для детализации плотности.

Производительность слоёв

Оптимизация работы слоёв достигается за счёт:

  • WebGL батчинга
  • предварительной агрегации
  • spatial indexing
  • минимизации пересчётов при обновлении состояния

Особенно критичны hexagon и grid слои, где используется GPU-ускоренная агрегация.

Расширяемость системы слоёв

Архитектура позволяет создавать пользовательские слои через расширение базового класса Layer. Такой слой должен реализовать:

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

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