В геопространственной визуализации часто требуется сравнение двух
наборов данных: до/после, разные временные срезы, альтернативные
сценарии обработки. В kepler.gl для этого используется режим split map —
разделённый экран с двумя синхронизированными картами. Механизм
toggleSplitMap управляет включением и выключением этого
режима, а также взаимодействием с состоянием приложения через
Redux-подобную архитектуру библиотеки.
Внутри Kepler.gl карта не является единым статическим объектом. Она строится на основе состояния:
mapState — параметры камеры, масштаба, центраvisState — слои, фильтры, данныеuiState — настройки интерфейса, включая split viewSplit map реализуется как логическое разделение одного визуального состояния на два синхронных под-окна:
При включении режима оба окна могут:
toggleSplitMap — это action, который переключает
состояние split view:
Фактически это переключатель UI-уровня, который влияет на layout и
поведение KeplerGl контейнера.
В состоянии приложения Kepler.gl split map обычно хранится в
uiState:
{
uiState: {
splitMapView: false
}
}
После вызова toggleSplitMap:
{
uiState: {
splitMapView: true
}
}
Это значение используется компонентом верхнего уровня для изменения layout.
Базовая интеграция строится через React-компонент:
import KeplerGl from 'kepler.gl';
import { useDispatch } from 'react-redux';
<KeplerGl
id="map"
width={window.innerWidth}
height={window.innerHeight}
/>
Когда активируется split mode, обычно создаются два идентификатора:
<KeplerGl id="map-left" />
<KeplerGl id="map-right" />
Внутренне переключение осуществляется через dispatch action:
import { toggleSplitMap } from 'kepler.gl/actions';
dispatch(toggleSplitMap());
Этот вызов:
Reducer обрабатывает действие примерно следующим образом:
case TOGGLE_SPLIT_MAP:
return {
...state,
uiState: {
...state.uiState,
splitMapView: !state.uiState.splitMapView
}
};
Это делает поведение детерминированным: состояние полностью зависит от предыдущего значения.
При включении split режима происходит перераспределение пространства:
Возможные конфигурации:
Часто toggleSplitMap используется вместе с контроллерами UI:
<button onCl ick={() => dispatch(toggleSplitMap())}>
Toggle Split View
</button>
При этом сам KeplerGl контейнер должен быть подготовлен к динамическому созданию двух инстансов.
При split режиме важно разделять mapState:
mapState.mapViewLeftmapState.mapViewRightили использовать общий state с override-логикой.
Пример концептуального разделения:
mapState: {
latitude: 40.7,
longitude: -73.9,
zoom: 12,
bearing: 0,
pitch: 0,
split: {
left: {...},
right: {...}
}
}
Kepler.gl поддерживает сценарии, где действия пользователя на одной карте могут отражаться на другой:
Это реализуется через middleware-логику, перехватывающую события камеры.
При переключении режима происходит:
WebGL контекст может быть переинициализирован, особенно при смене размеров.
Split view увеличивает нагрузку:
Рекомендуемые подходы:
При включении split view не обновляются размеры canvas → приводит к артефактам WebGL.
Обе карты получают разные версии mapState.
Один dataset загружается дважды вместо shared reference.
UI слой Kepler.gl реагирует на split mode:
Это определяется конфигурацией uiState.
Split map часто применяется для:
В таких сценариях toggleSplitMap становится центральным элементом взаимодействия, а не просто UI переключателем.
При возврате в single view: