Настройка внешнего вида слоёв

Визуальное оформление слоёв в Kepler.gl строится вокруг декларативной конфигурации visState.layers, где каждый слой описывается через набор параметров, управляющих геометрией, цветом, прозрачностью, толщиной линий, радиусами точек и методами агрегации. Архитектура основана на deck.gl, поэтому стилизация выполняется через слой-специфичные свойства, а не через CSS или внешние стили.

Каждый слой в Kepler.gl представляет собой объект с полями:

  • id — уникальный идентификатор
  • type — тип слоя (point, line, geojson, hexagon, arc, heatmap и др.)
  • config — конфигурация визуального представления
  • visualChannels — маппинг данных на визуальные свойства

Пример логики описания слоя:

  • данные определяют геометрию
  • config управляет внешним видом
  • visualChannels связывают поля данных с цветом, размером и прозрачностью

Цветовая настройка

Цвет в слоях Kepler.gl задаётся через несколько механизмов одновременно: фиксированные значения, палитры и вычисляемые каналы.

Основные подходы к цвету:

  • фиксированный цвет (color: [r, g, b])
  • цветовая шкала (colorRange)
  • динамическое сопоставление поля данных (colorField)

Цветовые диапазоны обычно описываются как массив оттенков:

  • минимальное значение → один конец спектра
  • максимальное значение → другой конец спектра

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

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

Прозрачность слоя задаётся через параметр opacity. Он влияет на общую визуальную плотность слоя и особенно критичен при наложении нескольких слоёв.

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

  • strokeOpacity — прозрачность линий
  • fillOpacity — прозрачность заливки

При работе с плотными наборами данных снижение opacity позволяет выявлять кластеры и перекрытия объектов.

Настройка размеров объектов

Размер элементов зависит от типа слоя:

  • точки — radius
  • линии — strokeWidth
  • полигоны — визуальная толщина границ

Размер может быть:

  • фиксированным
  • вычисляемым через поле данных (sizeField)
  • масштабируемым через sizeScale

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

Настройка Point Layer

Point Layer является одним из наиболее часто используемых. Его визуальные свойства включают:

  • радиус точек
  • цвет (фиксированный или динамический)
  • обводку (stroke)
  • высоту (при 3D режиме)

Особое значение имеет radiusMode, который определяет, как интерпретируется размер:

  • в пикселях
  • в метрах (географическая привязка)

При включении 3D режима добавляется параметр высоты, позволяющий визуализировать дополнительную переменную как вертикальное смещение.

Arc Layer и стилизация связей

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

  • strokeWidth — толщина дуги
  • sourceColor — цвет начала
  • targetColor — цвет конца
  • height — кривизна дуги

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

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

GeoJSON слой и стилизация полигонов

GeoJSON слой поддерживает сложные геометрии: полигоны, мультиполигоны, линии.

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

  • fillColor — цвет заливки
  • strokeColor — цвет границы
  • strokeWidth — толщина линии
  • extruded — включение 3D выдавливания

При extruded: true высота полигона может зависеть от поля данных, что позволяет строить объёмные карты плотности или статистики.

Hexagon Layer и агрегация

Hexagon Layer выполняет пространственную агрегацию данных в гексагональную сетку.

Ключевые параметры стилизации:

  • coverage — степень заполнения ячеек
  • elevationScale — масштаб высоты
  • colorRange — палитра значений
  • upperPercentile / lowerPercentile — обрезка выбросов

Высота гексагонов часто используется как основная визуальная переменная, отражающая плотность точек.

Heatmap Layer и плотность распределения

Heatmap Layer строит тепловую карту плотности точек.

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

  • radiusPixels — радиус влияния точки
  • intensity — сила воздействия
  • threshold — минимальный порог отображения
  • colorRange — градиент тепловой шкалы

В отличие от других слоёв, heatmap не отображает дискретные объекты, а формирует непрерывное поле значений.

Визуальные каналы (Visual Channels)

Kepler.gl использует концепцию визуальных каналов для связывания данных и стиля:

  • colorField — поле для цвета
  • sizeField — поле для размера
  • heightField — поле для высоты
  • textField — поле для подписи

Каждый канал может иметь:

  • агрегатор (sum, avg, count)
  • форматирование значений
  • шкалу нормализации

Это позволяет строить сложные визуализации без изменения исходных данных.

Масштабирование и нормализация

Для корректного отображения данных применяется нормализация:

  • линейная шкала
  • логарифмическая шкала
  • квантильная разбивка

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

Слои и порядок отрисовки

Порядок слоёв влияет на итоговую композицию карты. Каждый слой имеет z-index-подобное поведение:

  • нижние слои — базовые карты и фоновые данные
  • верхние слои — интерактивные или акцентные элементы

При наложении нескольких полупрозрачных слоёв важна корректная настройка blending mode, определяющего способ смешивания цветов.

Производительность и стилистические ограничения

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

  • увеличение количества визуальных каналов снижает FPS
  • высокие радиусы в heatmap увеличивают вычислительную нагрузку
  • 3D extrusion требует дополнительной GPU обработки

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

  • уменьшение точек через фильтрацию
  • агрегацию данных (hexagon layer вместо point layer)
  • ограничение диапазонов визуализации

Связь конфигурации слоя с состоянием visState

Все параметры внешнего вида слоёв хранятся в visState.layers, который является частью глобального состояния Kepler.gl. Изменение визуального стиля фактически означает обновление этого состояния.

Каждое изменение:

  • пересчитывает визуальные каналы
  • обновляет GPU-буферы deck.gl
  • перерисовывает сцену карты

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