Kepler.gl хранит состояние карты в виде структурированного объекта конфигурации, который описывает все элементы визуализации: слои, фильтры, стили, взаимодействия и параметры камеры. Этот объект является основой воспроизводимости визуализации и позволяет сохранять, переносить и восстанавливать сложные карты без повторной настройки интерфейса.
Экспорт конфигурации в JSON представляет собой процесс сериализации внутреннего состояния Kepler.gl в стандартный формат данных, который может быть сохранён в файл, передан по сети или использован в другом приложении.
Перед экспортом необходимо понимать, какие части состояния входят в конфигурацию:
Каждый из этих блоков является частью единого дерева состояния,
которое в Redux-хранилище Kepler.gl объединено в объект
keplerGl.
Экспорт выполняется через извлечение состояния из store и преобразование его в JSON-совместимый объект.
const config = store.getState().keplerGl.map.visState;
Однако такой подход неполный, поскольку экспортируется только часть состояния. Полноценная конфигурация требует агрегации всех ключевых сегментов.
const state = store.getState();
const fullConfig = {
version: "v1",
config: {
visState: state.keplerGl.map.visState,
mapState: state.keplerGl.map.mapState,
uiState: state.keplerGl.map.uiState,
mapStyle: state.keplerGl.map.mapStyle
}
};
const json = JSON.stringify(fullConfig, null, 2);
Форматирование с отступами позволяет использовать результат для отладки, хранения и последующего восстановления.
Kepler.gl предоставляет утилиты для экспорта конфигурации, которые учитывают внутренние преобразования состояния.
import KeplerGlSchema from 'kepler.gl/schemas';
const config = KeplerGlSchema.save(state.keplerGl.map);
Функция выполняет:
Каждый экспортированный JSON содержит поле версии схемы:
{
"version": "v1",
"config": {}
}
Версия критична для обратной совместимости. При обновлении Kepler.gl структура состояния может изменяться, поэтому версия используется для корректной миграции данных.
Внутреннее состояние Kepler.gl содержит временные данные, которые не всегда должны попадать в JSON:
При использовании схемы KeplerGlSchema.save происходит
автоматическая фильтрация этих данных. При ручном экспорте требуется
явная очистка.
В некоторых сценариях требуется сохранить только визуальные параметры без данных слоёв:
const mapConfig = {
mapState: state.keplerGl.map.mapState,
mapStyle: state.keplerGl.map.mapStyle
};
Такой экспорт используется для:
Kepler.gl позволяет формировать конфигурацию динамически, например при изменении состояния карты:
function exportOnChange() {
const state = store.getState().keplerGl.map;
return KeplerGlSchema.save(state);
}
Подобный подход используется в системах, где необходимо сохранять состояние после каждого изменения визуализации.
Для более точного контроля можно исключать отдельные слои:
const filteredLayers = state.keplerGl.map.visState.layers.filter(
layer => layer.config.dataId !== 'temporary_data'
);
const config = {
...state.keplerGl.map,
visState: {
...state.keplerGl.map.visState,
layers: filteredLayers
}
};
Это позволяет исключать:
В крупных приложениях экспорт часто интегрируется в пайплайн обработки данных:
function buildExportPayload(store) {
const state = store.getState().keplerGl.map;
return {
meta: {
createdAt: Date.now(),
source: "kepler-gl-app"
},
keplerConfig: KeplerGlSchema.save(state)
};
}
Такой подход добавляет метаданные к конфигурации, сохраняя при этом совместимость с Kepler.gl.
После формирования JSON объект может быть сохранён локально:
function downloadJSON(data) {
const blob = new Blob([JSON.stringify(data, null, 2)], {
type: 'application/json'
});
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = 'kepler-config.json';
a.click();
URL.revokeObjectURL(url);
}
Часто экспортируется только mapState, что приводит к потере слоёв и фильтров.
Использование устаревшей структуры без поля version
приводит к невозможности корректной загрузки.
Некоторые части состояния могут содержать функции, которые не сериализуются через JSON.stringify, что вызывает ошибки или потерю данных.
При больших наборах данных экспорт может становиться чрезмерно объёмным. Оптимизация достигается за счёт:
В архитектурах с централизованным хранением конфигурации JSON отправляется на сервер:
async function saveConfig(config) {
await fetch('/api/kepler-config', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(config)
});
}
Такая схема используется для:
Экспорт JSON напрямую связан с процессом восстановления карты:
Корректный экспорт обеспечивает полную обратимость состояния без потерь информации.