Встраиваемый код в Kepler.gl строится вокруг идеи сериализуемого состояния карты. Любая интерактивная визуализация, созданная в интерфейсе, может быть преобразована в набор структурированных данных, включающих:
Этот набор формирует единый JSON-конфиг, который используется как основа для последующего встраивания в JavaScript-приложение или статический HTML-документ.
Ключевым принципом является отделение данных от визуального представления: визуализация не хранит «жёстко закодированную» карту, а восстанавливает её из состояния.
Экспорт состояния осуществляется через механизм сохранения конфигурации, который формирует объект следующей структуры:
{
"version": "v1",
"config": {
"visState": {
"layers": [],
"filters": []
},
"mapState": {
"latitude": 59.93,
"longitude": 30.31,
"zoom": 10,
"bearing": 0,
"pitch": 0
},
"mapStyle": {
"styleType": "dark"
}
}
}
Данный JSON становится ядром встраиваемого кода, поскольку именно он позволяет восстановить идентичное состояние карты при повторной загрузке.
Основной способ интеграции Kepler.gl в JavaScript-приложение —
использование React-компонента KeplerGl, который
подключается как часть Redux-архитектуры.
Базовая структура выглядит следующим образом:
import KeplerGl from 'kepler.gl';
import { useDispatch } from 'react-redux';
import { addDataToMap } from 'kepler.gl/actions';
const MapContainer = () => {
const dispatch = useDispatch();
const datasets = {
data: sampleData,
info: {
label: 'Dataset'
}
};
const config = {
visState: {
layers: [],
filters: []
},
mapState: {
latitude: 55.75,
longitude: 37.61,
zoom: 10
},
mapStyle: {
styleType: 'dark'
}
};
dispatch(
addDataToMap({
datasets,
options: {
centerMap: true,
readOnly: false
},
config
})
);
return (
<KeplerGl
id="map"
width={800}
height={600}
/>
);
};
В этом сценарии встраиваемый код представляет собой комбинацию Redux-действий и JSON-конфигурации, которая восстанавливает карту в нужном состоянии.
Помимо React-интеграции, Kepler.gl поддерживает генерацию автономного HTML-файла, который можно использовать как полностью независимый встраиваемый артефакт.
Такой подход основан на упаковке:
Пример логики генерации HTML:
import { exportToHtml } from 'kepler.gl';
const html = exportToHtml({
datasets: [dataset],
config: mapConfig,
width: 1200,
height: 800
});
Результатом является HTML-документ, содержащий:
Такой файл может быть размещён на любом статическом хостинге без серверной логики.
Kepler.gl поддерживает механизм шаринга состояния через URL, где весь конфиг кодируется и передаётся в виде параметра.
Структура такого подхода:
Пример логики:
import { encode } from 'kepler.gl/dist/utils';
const encodedConfig = encode(mapConfig);
const shareUrl = `https://kepler.gl/demo?map=${encodedConfig}`;
При загрузке страницы приложение:
Этот механизм делает возможным перенос состояния карты между средами без повторного программирования.
Генерация embed-кода требует строгого разделения данных и конфигурации. Данные передаются в формате dataset-объектов:
const dataset = {
data: rawGeoJson,
info: {
label: 'Points Layer',
id: 'points'
}
};
При генерации embed-кода данные объединяются с конфигурацией слоя:
const embedPayload = {
datasets: [dataset],
config: mapConfig
};
При этом важно учитывать:
Kepler.gl позволяет автоматически формировать слои на основе структуры данных. При генерации embed-кода это используется для упрощения конфигурации.
Алгоритм включает:
Пример результата:
const autoLayerConfig = {
layers: [
{
id: 'point-layer',
type: 'point',
config: {
dataId: 'dataset_1',
columns: {
lat: 'latitude',
lng: 'longitude'
}
}
}
]
};
Этот подход используется при генерации embed-кода без ручной настройки визуализации.
Статический embed-код обычно включает минимальный HTML-контейнер и подключение Kepler.gl-бандла.
Структура:
<div id="kepler-map"></div>
<script src="kepler.gl.bundle.js"></script>
<script>
const config = window.__KEPLER_CONFIG__;
keplerGl.renderToDOM({
id: 'kepler-map',
data: window.__DATASET__,
config: config
});
</script>
В этом случае глобальные переменные используются как контейнер для данных и конфигурации, а рендер выполняется в один вызов.
Встраиваемый код чувствителен к изменениям структуры состояния. Для обеспечения совместимости используется поле версии:
{
"version": "v1",
"config": {}
}
При генерации embed-кода учитываются следующие факторы:
Версионирование позволяет воспроизводить старые карты без необходимости их пересоздания.
В серверной генерации embed-кода формируется полный пакет конфигурации, включающий:
Пример серверной функции:
function buildKeplerEmbed(data) {
const dataset = normalizeData(data);
const config = generateConfig(dataset);
return {
html: exportToHtml({ datasets: [dataset], config }),
config
};
}
Такой подход используется для автоматической публикации карт в аналитических системах.
При генерации встраиваемого кода учитываются ограничения WebGL и браузерного рендеринга:
Конфигурация может включать параметры оптимизации:
const performanceConfig = {
animation: false,
visState: {
interactionConfig: {
tooltip: { enabled: true }
}
}
};
Эти параметры напрямую влияют на стабильность встроенной карты в сторонних приложениях.
Для повторного использования embed-код часто упаковывается в отдельный модуль:
export const keplerEmbed = {
dataset,
config,
init(target) {
return renderKeplerGl({
id: target,
datasets: [this.dataset],
config: this.config
});
}
};
Такой подход обеспечивает переносимость между проектами и упрощает интеграцию в различные фронтенд-архитектуры.