Константы и енамы

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

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

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

  • согласованность между UI и state management;
  • предсказуемость редьюсеров;
  • расширяемость без модификации ядра;
  • поддержку версионирования конфигураций карт.

Константы действий (Action Types)

Система действий в Kepler.gl построена на Redux-подобной архитектуре, где каждое изменение состояния описывается через action type.

Типичный набор включает:

  • добавление и удаление данных;
  • обновление фильтров;
  • изменение viewport;
  • управление слоями;
  • конфигурация визуализации.

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

const ActionTypes = {
  ADD_DATA: 'ADD_DATA',
  REMOVE_DATA: 'REMOVE_DATA',
  UPDATE_MAP_STATE: 'UPDATE_MAP_STATE',
  LAYER_CONFIG_CHANGE: 'LAYER_CONFIG_CHANGE',
  SET_FILTER: 'SET_FILTER',
  APPLY_FILTER: 'APPLY_FILTER'
};

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

Enum слоёв визуализации

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

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

  • точечный слой (Point Layer)
  • линейный слой (Line Layer)
  • дуговой слой (Arc Layer)
  • полигональный слой (Polygon Layer)
  • гексагональная сетка (Hexagon Layer)
  • кластеризация (Cluster Layer)
  • GeoJSON слой

Логическая модель:

const LAYER_TYPES = {
  POINT: 'point',
  ARC: 'arc',
  LINE: 'line',
  POLYGON: 'polygon',
  HEXAGON: 'hexagon',
  GEOJSON: 'geojson',
  GRID: 'grid'
};

Каждый тип слоя определяет:

  • схему входных данных;
  • методы агрегации;
  • правила интерполяции координат;
  • параметры визуализации (цвет, высота, радиус и т.д.).

Константы состояния карты

Состояние карты включает параметры viewport, стили базовой карты и настройки взаимодействия.

Типовые группы констант:

Управление viewport

Viewport описывает текущее положение карты:

const MAP_STATE_KEYS = {
  LATITUDE: 'latitude',
  LONGITUDE: 'longitude',
  ZOOM: 'zoom',
  PITCH: 'pitch',
  BEARING: 'bearing'
};

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

Стили карты

Базовые стили определяют визуальный фон:

const MAP_STYLES = {
  DARK: 'dark',
  LIGHT: 'light',
  MUTED: 'muted',
  SATELLITE: 'satellite',
  ROADMAP: 'roadmap'
};

Каждый стиль влияет на восприятие геоданных и контрастность визуальных слоёв.

Константы фильтрации данных

Фильтры в Kepler.gl представляют собой отдельную подсистему, работающую поверх данных слоёв.

Основные типы фильтров:

  • числовые диапазоны;
  • временные фильтры;
  • категориальные фильтры.

Структура enum-подобных значений:

const FILTER_TYPES = {
  RANGE: 'range',
  TIME: 'time',
  SELECT: 'sel ect'
};

Каждый тип фильтра определяет:

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

Константы взаимодействия (interaction config)

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

const INTERACTION_MODES = {
  READ_ONLY: 'read_only',
  EDIT: 'edit',
  DRAW: 'draw',
  SELECT: 'sel ect'
};

Эти режимы определяют, доступно ли редактирование слоёв, выделение объектов или добавление новых геометрий.

Константы временных форматов

Работа с временными данными требует унифицированного представления:

const TIME_FORMATS = {
  ISO8601: 'iso8601',
  UNIX: 'unix',
  STRING: 'string'
};

Эти форматы используются при:

  • парсинге данных;
  • фильтрации временных интервалов;
  • синхронизации анимаций;
  • построении временных слоёв.

Константы визуальных атрибутов

Каждый слой поддерживает набор визуальных свойств, стандартизированных через ключи:

const VISUAL_CHANNELS = {
  COLOR: 'color',
  SIZE: 'size',
  HEIGHT: 'height',
  STROKE: 'stroke',
  OPACITY: 'opacity'
};

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

Enum файловых форматов данных

Импорт и экспорт данных в Kepler.gl осуществляется через строго определённые форматы.

const FILE_FORMATS = {
  CSV: 'csv',
  GEOJSON: 'geojson',
  JSON: 'json',
  SHAPEFILE: 'shapefile',
  KML: 'kml'
};

Каждый формат требует отдельного парсера и маппинга в внутреннюю структуру dataset.

Константы конфигурации датасета

Данные внутри Kepler.gl нормализуются в унифицированный формат с фиксированными ключами:

const DATASET_KEYS = {
  ID: 'id',
  LABEL: 'label',
  DATA: 'data',
  FIELDS: 'fields',
  ROWS: 'rows'
};

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

Константы событий пользовательского интерфейса

UI взаимодействия также абстрагируются через набор событийных идентификаторов:

const UI_EVENTS = {
  CLICK_LAYER: 'click_layer',
  HOVER_OBJECT: 'hover_object',
  TOGGLE_VISIBILITY: 'toggle_visibility',
  OPEN_PANEL: 'open_panel',
  CLOSE_PANEL: 'close_panel'
};

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

Паттерны использования констант в кодовой базе

Внутренняя архитектура Kepler.gl строится на нескольких устойчивых паттернах:

Централизация строковых значений

Все строки, участвующие в логике, выносятся в отдельные модули:

import { LAYER_TYPES } fr om 'constants/layers';
import { MAP_STYLES } fr om 'constants/map-styles';

Иммутабельность

Константы не изменяются во время выполнения. Это критично для предсказуемости Redux-архитектуры.

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

Константы группируются по доменам:

  • layers
  • map
  • filters
  • interaction
  • ui
  • data

Расширение системы enum через плагины

Архитектура допускает добавление новых типов слоёв и режимов через расширение базовых констант.

Механизм расширения обычно включает:

  • добавление нового ключа в LAYER_TYPES;
  • регистрацию нового слоя в factory;
  • определение схемы визуализации;
  • подключение к UI панели.

Пример расширения:

const CUSTOM_LAYER_TYPES = {
  HEATMAP_ADVANCED: 'heatmap_advanced'
};

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

Связь констант с сериализацией состояния

Kepler.gl активно использует сериализацию конфигураций карт. Константы обеспечивают обратимую структуру состояния:

  • layer configuration → JSON
  • map state → JSON
  • filter state → JSON

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