В архитектуре Kepler.gl ключевым принципом визуализации пространственных данных является разбиение представления на независимые слои, где каждый слой отвечает за собственную логику рендеринга, фильтрации и стилизации. Такая модель позволяет строить сложные карты из набора автономных визуальных компонентов, не связывая их жёстко между собой.
Независимый слой в Kepler.gl — это логически изолированная единица визуализации, которая:
Главная идея заключается в том, что карта перестаёт быть монолитной сценой и превращается в композицию слоёв, каждый из которых можно изменять без побочных эффектов.
Такой подход особенно важен при работе с многослойными геоданными: транспорт, точки интереса, тепловые карты, траектории движения и агрегированные области часто требуют различных способов визуализации в рамках одной сцены.
Каждый слой описывается как объект конфигурации внутри состояния приложения:
const layer = {
id: 'points-layer',
type: 'point',
dataId: 'my_dataset',
config: {
columns: {
lat: 'latitude',
lng: 'longitude'
},
visConfig: {
radius: 10,
color: [255, 0, 0],
opacity: 0.8
},
hidden: false
}
};
Ключевые части структуры:
Каждый слой полностью автономен в рамках своего конфигурационного объекта.
Одним из важнейших аспектов независимости является способ привязки данных. Несколько слоёв могут:
При этом каждый слой формирует собственную интерпретацию данных.
Пример:
const layers = [
{
id: 'points',
type: 'point',
dataId: 'cities',
config: {
columns: { lat: 'lat', lng: 'lng' }
}
},
{
id: 'heatmap',
type: 'heatmap',
dataId: 'cities',
config: {
columns: { lat: 'lat', lng: 'lng', weight: 'population' }
}
}
];
Здесь оба слоя используют один источник данных, но строят разные визуальные представления. Один отображает дискретные точки, другой — плотность распределения.
Каждый слой в Kepler.gl обладает собственной системой визуальных параметров. Это включает:
Эти параметры не наследуются глобально, а задаются на уровне слоя.
Пример различий:
visConfig: {
opacity: 0.6,
colorRange: {
name: 'ColorBrewer YlOrRd',
type: 'sequential',
category: 'ColorBrewer'
}
}
Изменение визуальных параметров одного слоя не влияет на другие, даже если они используют одинаковые данные.
Kepler.gl хранит состояние слоёв в едином store, но каждый слой обновляется независимо через actions.
Основные операции:
Пример добавления слоя:
import { addLayer } from 'kepler.gl/actions';
dispatch(addLayer({
id: 'new-layer',
type: 'arc',
dataId: 'routes',
config: {
columns: {
lat0: 'start_lat',
lng0: 'start_lng',
lat1: 'end_lat',
lng1: 'end_lng'
}
}
}));
Каждое изменение применяется только к конкретному слою, без необходимости пересобирать всю карту.
Фильтры в Kepler.gl могут применяться как глобально, так и локально к слоям. В контексте независимых слоёв важен именно второй вариант.
Каждый слой может:
Пример логики:
layer.filter = {
enabled: true,
field: 'speed',
value: [10, 80]
};
Это означает, что слой будет рендерить только объекты, удовлетворяющие собственному диапазону значений, независимо от других слоёв на карте.
Независимость не означает изоляцию от взаимодействия. Слои могут:
Порядок слоёв влияет на итоговую визуализацию:
Пример композиции:
Такая структура создаёт многослойную семантическую карту.
Независимые слои могут быть переиспользованы как шаблоны. Это особенно важно при динамической генерации карт.
Пример фабрики слоя:
function createPointLayer(id, dataId, color) {
return {
id,
type: 'point',
dataId,
config: {
visConfig: {
color,
radius: 8,
opacity: 0.7
}
}
};
}
Такой подход позволяет стандартизировать визуальные компоненты и создавать согласованные наборы слоёв.
Каждый слой может обрабатывать пользовательские взаимодействия независимо:
Например, выделение объекта в одном слое не обязано затрагивать другой слой, даже если геометрически они совпадают.
Это достигается через:
Независимость слоёв имеет прямое влияние на производительность рендеринга.
Ключевые особенности:
Однако при большом количестве слоёв возникают важные ограничения:
Оптимизация достигается через:
Каждый слой имеет собственный набор конфигурационных параметров, которые не зависят от глобальной темы карты.
Это включает:
Таким образом, карта перестаёт быть единым стилевым пространством и становится набором визуальных модулей.
Независимые слои формируют фундаментальную модель организации визуализации:
Это позволяет строить масштабируемые геоприложения, где добавление нового слоя не требует переработки существующих компонентов.
Модель слоёв становится аналогом компонентной архитектуры в UI-системах, но применённой к геопространственным данным и WebGL-рендерингу.