Kepler.gl представляет собой высокоуровневую библиотеку для
визуализации геоданных, построенную поверх React и Redux. Архитектура
построена вокруг централизованного состояния карты и набора
action-методов, через которые выполняются все операции: загрузка данных,
управление слоями, фильтрами, взаимодействиями и стилями
отображения.
Основной принцип API заключается в том, что любое изменение карты
проходит через единый поток действий (actions), которые диспатчатся в
Redux store. Это обеспечивает предсказуемость состояния и упрощает
интеграцию с внешними приложениями.
С точки зрения API выделяются следующие уровни:
- React-компонент KeplerGl
- Redux actions (основной API управления)
- selectors (чтение состояния)
- конфигурация (mapState, visState, uiState)
React-компонент KeplerGl
Базовой точкой входа является компонент:
Компонент принимает следующие ключевые параметры:
id — уникальный идентификатор инстанса карты
width, height — размеры контейнера
mapboxApiAccessToken — токен Mapbox
data — начальные данные (опционально)
theme — тема оформления (light/dark)
appState — начальное состояние UI и карты
onStateChange — callback для отслеживания изменений
состояния
Компонент не содержит бизнес-логики, а полностью делегирует её
Redux-слою.
Redux Actions как основной
API
addDataToMap
Ключевой метод загрузки данных в визуализацию.
Назначение:
- добавление датасета
- автоматическое создание слоя (если включено)
- генерация базовой конфигурации отображения
Сигнатура (концептуально):
Поведение:
- создаётся dataset в
visState.datasets
- генерируется layerConfig
- обновляются фильтры при необходимости
addDataToMapFlow
Упрощённый вариант добавления данных с автоматической обработкой
пайплайна.
Используется для:
- динамической загрузки CSV/JSON
- потоковой интеграции данных
Особенность:
- включает стадии parsing → normalization → mapping → rendering
removeDataset
Удаление датасета из состояния.
Последствия:
- удаляются связанные слои
- очищаются фильтры
- пересчитывается bounding box карты
Важно:
- операция необратима без сохранения предыдущего состояния
renameDataset
Позволяет изменить идентификатор или имя датасета.
Влияет на:
- ссылки в слоях
- фильтры
- tooltips
Управление картой (Map State
API)
updateMap
Базовый метод управления состоянием карты.
Позволяет изменять:
- центр карты (
latitude, longitude)
- масштаб (
zoom)
- угол наклона (
bearing)
- наклон камеры (
pitch)
Поведение:
- изменения применяются мгновенно
- поддерживается анимация переходов при включённых transitions
fitBounds
Автоматическая подгонка карты под границы данных.
Вход:
- bounding box (min/max координаты)
- padding
Результат:
- центрирование карты
- корректировка zoom уровня
Используется после:
- добавления датасета
- фильтрации географического диапазона
togglePerspective
Переключение между 2D и 3D режимами.
Влияние:
- изменение pitch
- активация 3D слоёв (hexagon, grid)
Управление слоями (Layers
API)
updateLayerConfig
Основной метод изменения слоя.
Позволяет модифицировать:
- тип слоя (point, line, arc, heatmap)
- визуальные параметры (цвет, радиус, высота)
- данные (dataId, columns)
Механизм:
- происходит перегенерация layer instance
- триггерится rerender WebGL слоя
addLayer
Добавление нового слоя к существующей визуализации.
Параметры:
Особенность:
- слой добавляется в конец стека отрисовки
- влияет на z-index визуализации
removeLayer
Удаление слоя по идентификатору.
Последствия:
- пересборка pipeline рендеринга
- освобождение GPU ресурсов слоя
duplicateLayer
Создание копии слоя с сохранением всех параметров.
Используется для:
- A/B визуализации
- сравнения разных фильтров
- тестирования параметров
Фильтрация данных (Filters
API)
addFilter
Создание нового фильтра для датасета.
Типы фильтров:
- time filter
- range filter
- select filter
Параметры:
- dataId
- field
- domain
- value
updateFilter
Изменение текущего фильтра.
Операции:
- изменение диапазона
- изменение выбранных значений
- переключение режима инклюзивности
removeFilter
Удаление фильтра и пересчёт отображаемых данных.
Эффект:
- обновление всех слоёв, зависящих от фильтра
- пересчёт статистики датасета
Взаимодействие (Interaction
API)
updateInteractionConfig
Контроль интерактивности карты:
- включение tooltip
- hover events
- click events
- brush selection
Конфигурация позволяет управлять:
- реакцией слоёв на события
- отображением всплывающих окон
setInteraction
Более низкоуровневый метод, управляющий поведением событийной
модели.
Используется для:
- отключения взаимодействий
- настройки кастомных обработчиков
UI State API
toggleModal
Управление модальными окнами интерфейса:
- легенда
- настройки слоя
- импорт данных
updateVisData
Обновление данных визуализации без пересоздания всей карты.
Особенность:
- оптимизированный rerender
- сохраняются слои и фильтры
Конфигурационный API
exportToJson
Сериализация полного состояния карты.
Включает:
- visState
- mapState
- uiState
Используется для:
- сохранения проекта
- передачи состояния между приложениями
loadMap
Загрузка ранее сохранённой конфигурации.
Этапы:
- восстановление datasets
- восстановление layers
- восстановление filters
- восстановление map viewport
updateMapConfig
Обновление глобальной конфигурации визуализации:
- theme
- style
- animation settings
- interaction defaults
Селекторы состояния
Kepler.gl предоставляет доступ к состоянию через selectors:
- getMapState
- getVisState
- getUIState
- getDataset
Особенности:
- позволяют избегать прямого доступа к Redux store
- обеспечивают мемоизированный доступ к данным
- используются для оптимизации рендера
Асинхронные потоки данных
Некоторые методы API поддерживают асинхронный режим:
- загрузка больших CSV/GeoJSON
- потоковая агрегация данных
- WebWorker parsing
Внутренний pipeline:
- ingestion
- parsing
- normalization
- schema inference
- layer generation
- render dispatch
Взаимодействие API с
WebGL-рендерингом
Все изменения через API транслируются в Deck.gl слой рендеринга. Это
приводит к:
- перерасчёту геометрии
- обновлению GPU buffers
- оптимизации draw calls
Ключевой момент — разделение логики состояния и визуального рендера,
где API управляет только декларативным состоянием, а не непосредственной
отрисовкой.