Библиотека Kepler.gl построена поверх React и Redux и ориентирована
на визуализацию больших геопространственных наборов данных. Основная
интеграция осуществляется через React-компонент KeplerGl,
который связывается с глобальным состоянием приложения.
Установка выполняется через менеджер пакетов:
npm install kepler.gl react-map-gl mapbox-gl
Для корректной работы требуется подключение стилей Mapbox:
import 'mapbox-gl/dist/mapbox-gl.css';
Также необходимо подключение редьюсера библиотеки в Redux-хранилище, поскольку Kepler.gl хранит состояние карты (слои, фильтры, данные) в глобальном сторе.
Архитектура Kepler.gl опирается на единый store. Базовая интеграция требует добавления редьюсера:
import { createStore, combineReducers, applyMiddleware } from 'redux';
import keplerGlReducer from 'kepler.gl/reducers';
const reducers = combineReducers({
keplerGl: keplerGlReducer
});
const store = createStore(reducers);
Состояние keplerGl становится центральной точкой
управления картой. В него записываются:
Компонент KeplerGl размещается внутри React-приложения и
получает идентификатор инстанса. Этот идентификатор используется для
изоляции нескольких карт.
import KeplerGl from 'kepler.gl';
function MapContainer() {
return (
<KeplerGl
id="geo-map"
width={800}
height={600}
/>
);
}
Ключевой момент: id связывает компонент
с соответствующей частью Redux-структуры
state.keplerGl.geo-map.
Kepler.gl работает с табличными структурами, где каждая запись представляет географическую точку или объект.
Минимально допустимый формат:
const sampleData = {
fields: [
{ name: 'lat', type: 'real' },
{ name: 'lng', type: 'real' }
],
rows: [
[55.751244, 37.618423],
[59.931058, 30.360909]
]
};
Обязательные требования:
Данные передаются через action addDataToMap. Этот
механизм синхронизирует dataset с Redux-состоянием и автоматически
инициирует отрисовку слоя.
import { addDataToMap } from 'kepler.gl/actions';
store.dispatch(
addDataToMap({
datasets: {
info: {
label: 'Cities',
id: 'cities'
},
data: sampleData
}
})
);
После выполнения действия система автоматически:
Состояние карты включает три ключевых блока:
Отвечает за положение камеры:
viewState: {
latitude: 55.751244,
longitude: 37.618423,
zoom: 5,
bearing: 0,
pitch: 0
}
Особенность: изменение zoom и координат влияет только на текущий инстанс карты.
Слои определяют способ визуализации данных:
Каждый слой конфигурируется отдельно и привязывается к dataset.
Фильтры позволяют ограничивать отображаемые данные по диапазонам значений:
Фильтрация выполняется на уровне GPU-рендеринга, что обеспечивает высокую производительность.
Хотя Kepler.gl автоматически генерирует слой, возможна ручная настройка:
import { layers } from 'kepler.gl';
const pointLayer = new layers.PointLayer({
dataId: 'cities',
color: [255, 0, 0],
columns: {
lat: 'lat',
lng: 'lng'
},
isVisible: true
});
Ключевые параметры:
dataId — связывает слой с datasetcolumns — определяет географические поляcolor — задаёт визуальное оформлениеИнициализация карты с заданной позицией выполняется через
addDataToMap с параметром config:
store.dispatch(
addDataToMap({
datasets: {
info: { id: 'cities', label: 'Cities' },
data: sampleData
},
options: {
centerMap: true,
readOnly: false
},
config: {
mapState: {
latitude: 55.751244,
longitude: 37.618423,
zoom: 4
}
}
})
);
Kepler.gl поддерживает одновременную работу с несколькими источниками данных. Каждый dataset получает уникальный идентификатор:
datasets: [
{
info: { id: 'cities' },
data: citiesData
},
{
info: { id: 'routes' },
data: routesData
}
]
Слои могут комбинировать данные из разных источников, создавая сложные визуализации, включая связи между точками и временные траектории.
Компонент KeplerGl подписывается на соответствующую
часть состояния через mapStateToProps:
Архитектурно система работает по принципу однонаправленного потока данных:
Action → Reducer → Store → Component
Типичная интеграция включает:
import { Provider } from 'react-redux';
function App() {
return (
<Provider store={store}>
<MapContainer />
</Provider>
);
}
После подключения store и компонента происходит последовательный процесс:
Kepler.gl использует WebGL-рендеринг, что обеспечивает обработку больших массивов координат без значительной нагрузки на CPU.