В основе Kepler.gl лежит строго табличная модель представления информации, где каждый набор данных рассматривается как совокупность строк и столбцов. Такая структура обеспечивает универсальность: независимо от источника (CSV, JSON, API), данные приводятся к единому формату перед визуализацией.
Типичный dataset в Kepler.gl описывается объектом вида:
const dataset = {
data: {
fields: [
{ name: 'latitude', type: 'real' },
{ name: 'longitude', type: 'real' },
{ name: 'timestamp', type: 'timestamp' },
{ name: 'category', type: 'string' }
],
rows: [
[51.5074, -0.1278, 1680000000000, 'A'],
[48.8566, 2.3522, 1680003600000, 'B']
]
}
};
Каждая строка соответствует одному объекту в пространстве данных, а каждый столбец — конкретному признаку, используемому слоями визуализации.
Kepler.gl строго различает типы данных, поскольку от этого зависит способ интерпретации значений в слоях (layers), фильтрах и агрегациях.
Поле описывается структурой:
{
name: 'field_name',
type: 'real' | 'integer' | 'timestamp' | 'string' | 'boolean'
}
Типизация определяет:
Числовые типы используются в большинстве визуальных слоёв: scatterplot, heatmap, hexagon, arc.
Пример:
{
name: 'speed',
type: 'real'
},
{
name: 'count',
type: 'integer'
}
Особенность Kepler.gl заключается в том, что визуальные слои не различают семантику числа, но учитывают диапазон и распределение значений при агрегации.
Тип timestamp является ключевым для построения
динамических визуализаций и временных фильтров.
{
name: 'time',
type: 'timestamp'
}
В Kepler.gl временные значения обычно представлены в формате UNIX epoch (миллисекунды).
Использование:
Пример данных:
[51.5, -0.12, 1680000000000]
Временные поля часто требуют предварительной нормализации из ISO-строк в числовой формат.
Тип string используется для описания категорий,
идентификаторов и меток.
{
name: 'city',
type: 'string'
}
Особенности:
Пример применения:
Тип boolean используется реже, но играет роль в
фильтрации и бинарной классификации.
{
name: 'is_active',
type: 'boolean'
}
Внутренне Kepler.gl рассматривает их как категориальные значения с двумя состояниями.
Хотя Kepler.gl не выделяет отдельный тип geo, координаты
являются фундаментальным элементом всех пространственных слоёв.
Обычно используются два поля:
latitudelongitude[
55.7558,
37.6173
]
Важно, что:
широта и долгота должны быть числовыми
(real)
порядок строго соблюдается
допустимый диапазон обязателен:
Ошибки в диапазоне приводят к исчезновению объектов на карте.
Kepler.gl поддерживает GeoJSON как отдельный формат географических данных.
Пример объекта:
const geojson = {
type: "FeatureCollection",
features: [
{
type: "Feature",
geometry: {
type: "Point",
coordinates: [37.6173, 55.7558]
},
properties: {
name: "Moscow"
}
}
]
};
Особенности GeoJSON:
GeoJSON применяется там, где табличная модель недостаточна.
Trip layer требует специфической структуры, где маршрут описывается последовательностью координат с временными метками.
Пример:
[
{
route: [
[37.6, 55.7, 1680000000000],
[37.7, 55.8, 1680003600000]
]
}
]
Особенности:
Trip data фактически объединяет географические и временные типы в одной структуре.
Hexagon layer не требует специального формата, но критически зависит от числовых координат.
Входные данные:
[
{ lat: 55.75, lng: 37.61 },
{ lat: 55.76, lng: 37.62 }
]
или табличный формат:
[
[55.75, 37.61],
[55.76, 37.62]
]
Далее Kepler.gl выполняет пространственную агрегацию, преобразуя точки в гексагональную сетку.
Kepler.gl поддерживает несколько внутренних представлений dataset:
rows: [
[value1, value2],
[value1, value2]
]
Используется для компактности и быстрого доступа по индексам.
rows: [
{ lat: 55.7, lng: 37.6 },
{ lat: 55.8, lng: 37.7 }
]
Используется при загрузке из JSON.
{
columns: {
lat: [55.7, 55.8],
lng: [37.6, 37.7]
}
}
Оптимизирован для больших массивов данных и применяется внутри некоторых этапов обработки.
Перед передачей данных в Kepler.gl выполняется обязательная нормализация:
Пример преобразования:
const normalized = raw.map(d => ({
lat: Number(d.lat),
lng: Number(d.lng),
time: new Date(d.time).getTime()
}));
Kepler.gl способен частично определять типы автоматически, однако результат зависит от качества входных данных.
Правила:
real
или integertimestampОшибочная типизация приводит к:
Типичные ошибки при работе с данными:
"55.75" // вместо 55.75
→ ломает spatial layers
"2024-01-01T00:00:00Z"
→ требует преобразования в timestamp
[lng, lat] // вместо [lat, lng]
→ приводит к смещению объектов на карте
{
fields: [
{ name: 'lat', type: 'real' },
{ name: 'lng', type: 'real' }
],
rows: [...]
}
{
fields: [
{ name: 'lat', type: 'real' },
{ name: 'lng', type: 'real' },
{ name: 'time', type: 'timestamp' }
]
}
{
fields: [
{ name: 'lat', type: 'real' },
{ name: 'lng', type: 'real' },
{ name: 'type', type: 'string' },
{ name: 'time', type: 'timestamp' }
]
}
{
fields: [
{ name: 'lat', type: 'real' },
{ name: 'lng', type: 'real' },
{ name: 'value', type: 'integer' }
]
}
Каждый слой Kepler.gl интерпретирует типы по-своему:
Тип данных напрямую определяет визуальное поведение, масштабирование и возможность анимации.