kepler.gl предоставляет гибкую систему настройки интерфейса,
позволяющую управлять отображением панели инструментов, поведением
элементов карты, доступностью функций и общей компоновкой UI без
необходимости модифицировать исходный код библиотеки. Интерфейс строится
поверх архитектуры состояний (Redux-подобной модели), где ключевую роль
играет объект конфигурации uiState.
UI в Kepler.gl формируется несколькими слоями состояния:
Основная настройка интерфейса сосредоточена именно в
uiState, который определяет, какие элементы доступны
пользователю и как они взаимодействуют между собой.
Типичная структура настройки интерфейса:
const uiState = {
readOnly: false,
activeSidePanel: null,
currentModal: null,
mapControls: {
visibleLayers: true,
mapLegend: true,
toggle3d: true,
splitMap: true,
mapDraw: true,
mapLocale: true
},
mapUI: {
showTooltip: true
}
};
Флаг readOnly блокирует возможность изменения карты. В
этом режиме:
Используется для демонстрационных режимов и публикации готовых карт.
Определяет активную боковую панель:
null — панель скрыта"layer" — управление слоями"filter" — фильтры"interaction" — настройки взаимодействий"dataset" — управление даннымиПрограммная смена панели позволяет формировать предустановленные сценарии анализа.
Kepler.gl использует модульную структуру панелей, каждая из которых может быть включена или отключена.
Боковая панель — центральный элемент интерфейса. Управление её
состоянием осуществляется через uiState:
uiState: {
activeSidePanel: "layer"
}
Дополнительно можно ограничить доступ к панели:
uiState: {
readOnly: true,
activeSidePanel: null
}
При этом панель полностью скрывается, а карта переходит в режим просмотра.
Гибкая конфигурация позволяет скрывать отдельные элементы:
uiState: {
mapControls: {
visibleLayers: false,
mapLegend: false,
splitMap: false
}
}
Такой подход используется при создании минималистичных интерфейсов или встраиваемых карт.
Контролы карты задаются через объект mapControls,
который управляет видимостью функциональных кнопок.
Пример конфигурации:
uiState: {
mapControls: {
visibleLayers: true,
mapLegend: true,
toggle3d: false,
splitMap: false,
mapDraw: true,
mapLocale: true
}
}
Отключение toggle3d часто используется в аналитических
приложениях, где 3D визуализация не требуется.
Kepler.gl использует модальные окна для загрузки данных, настройки и экспорта.
uiState: {
currentModal: "addDataModal"
}
Возможные значения:
addDataModal — добавление данныхexportImage — экспорт изображенияexportData — экспорт датасетаsettings — настройкиУстановка null закрывает любое активное окно.
Интерактивность карты частично контролируется через
mapUI:
uiState: {
mapUI: {
showTooltip: true,
tooltip: {
enabled: true
}
}
}
Tooltip можно полностью отключить:
uiState: {
mapUI: {
showTooltip: false
}
}
Это полезно при статической визуализации или генерации изображений карты.
Режим readOnly влияет не только на интерфейс, но и на
поведение всей системы:
uiState: {
readOnly: true
}
Последствия:
Используется в embed-режимах и публичных дашбордах.
В некоторых сценариях интерфейс полностью минимизируется:
uiState: {
readOnly: true,
mapControls: {
visibleLayers: false,
mapLegend: false,
toggle3d: false,
splitMap: false,
mapDraw: false,
mapLocale: false
},
activeSidePanel: null
}
Такой режим применяется для создания чистых визуализаций без элементов управления.
UI Kepler.gl поддерживает базовую настройку темы:
uiState: {
theme: "dark"
}
Доступные варианты:
"dark" — тёмная тема"light" — светлая темаТема влияет на:
Язык интерфейса задаётся через locale:
uiState: {
locale: {
locale: "ru",
messages: {}
}
}
Основные особенности:
locale определяет язык UImessages позволяет переопределять текст интерфейсаПример частичной локализации:
uiState: {
locale: {
locale: "ru",
messages: {
"tooltip.loading": "Загрузка данных...",
"button.addData": "Добавить данные"
}
}
}
В React-интеграции Kepler.gl конфигурация передаётся через пропсы:
import KeplerGl from 'kepler.gl';
<KeplerGl
id="map"
width={800}
height={600}
mapboxApiAccessToken={token}
uiState={uiState}
/>
При использовании Redux:
dispatch(
addDataToMap({
datasets,
options: {
centerMap: true,
readOnly: false
},
config: {
uiState
}
})
);
UI можно изменять во время выполнения:
dispatch(
updateVisData({
uiState: {
activeSidePanel: "filter"
}
})
);
Это позволяет:
Встраиваемые решения часто требуют упрощённого интерфейса:
uiState: {
mapControls: {
mapLegend: false,
visibleLayers: false
},
activeSidePanel: null,
readOnly: true
}
Такой подход превращает Kepler.gl в чистый визуализационный слой без аналитических инструментов.
UI адаптируется под размеры контейнера, однако часть элементов можно дополнительно ограничить:
uiState: {
mapControls: {
mapLegend: false
}
}
Каждый элемент интерфейса связан с состоянием приложения. Изменение одной части UI может влиять на другие:
visStatemapStateЭто обеспечивает синхронность интерфейса без необходимости ручного DOM-управления.
UI слой используется не только для отображения, но и для ограничения возможностей:
uiState: {
currentModal: null,
mapControls: {
mapDraw: false
},
readOnly: true
}
Такая конфигурация часто применяется в корпоративных дашбордах и публичных витринах данных.