Point layer в Kepler.gl предназначен для отображения дискретных объектов в виде точек на карте. Каждый элемент слоя соответствует одной географической записи с координатами (longitude, latitude). Этот тип слоя является базовым инструментом для анализа распределённых данных, плотности событий, пользовательской активности, транспортных точек и любых наборов данных, где важна геопривязка отдельных объектов без необходимости их агрегирования в линии или полигоны.
В отличие от кластеризации или heatmap, Point layer сохраняет индивидуальность каждой записи, что позволяет выполнять точечный анализ и визуально выделять аномалии, паттерны и выбросы.
Для корректной работы слоя требуется минимальная структура входных данных:
{
"fields": [
{ "name": "longitude", "type": "real" },
{ "name": "latitude", "type": "real" },
{ "name": "category", "type": "string" }
],
"rows": [
[37.6156, 55.7522, "event"],
[30.3141, 59.9386, "event"]
]
}
Ключевые требования:
Дополнительные поля используются для стилизации, фильтрации и интерактивности.
Point layer задаётся через конфигурацию layers в состоянии Kepler.gl:
const pointLayer = {
id: "point-layer",
type: "point",
config: {
dataId: "dataset_1",
label: "Points",
color: [255, 140, 0],
columns: {
lat: "latitude",
lng: "longitude"
},
isVisible: true,
visConfig: {
radius: 10,
fixedRadius: false,
opacity: 0.8,
outline: false,
thickness: 2,
strokeColor: null,
colorRange: {
name: "Global Warming",
type: "sequential",
category: "Uber",
colors: ["#1f9e89", "#55c667", "#5ec962", "#c2df23", "#fde725"]
}
}
}
};
Радиус определяет размер каждой точки на карте:
Пример динамического режима:
visConfig: {
radius: 5,
fixedRadius: false,
radiusRange: [1, 20]
}
Динамический радиус применяется при анализе плотности или весовых характеристик объектов.
visConfig: {
opacity: 0.6
}
Низкая прозрачность используется при работе с плотными наборами данных, где точки перекрывают друг друга.
Обводка улучшает читаемость точек на насыщенном фоне:
visConfig: {
outline: true,
thickness: 1,
strokeColor: [0, 0, 0]
}
Обводка особенно полезна при визуализации светлых цветов на светлых тайлах карты.
Point layer поддерживает несколько стратегий окрашивания:
color: [0, 128, 255]
Используется при визуализации однородных объектов.
Привязка к полю типа string:
colorField: {
name: "category",
type: "string"
}
Сопоставление значений:
colorRange: {
type: "categorical",
colors: ["#ff6b6b", "#4dabf7", "#51cf66"]
}
Используется для отображения интенсивности значений:
colorField: {
name: "value",
type: "integer"
}
colorRange: {
type: "sequential",
colors: ["#f7fbff", "#6baed6", "#08306b"]
}
При наведении на точку Kepler.gl формирует объект:
{
object: {
position: [lng, lat],
properties: {
category: "event",
value: 42
}
}
}
Эти данные используются для отображения tooltip.
{
fieldsToShow: {
dataset_1: ["category", "value"]
}
}
Tooltip может быть кастомизирован по набору полей и их порядку отображения.
Point layer поддерживает фильтры по полям данных:
{
name: "value",
type: "range",
value: [10, 100]
}
{
name: "category",
type: "multiSelect",
value: ["event", "incident"]
}
Фильтрация выполняется до рендеринга слоя, что снижает нагрузку на визуализацию.
Point layer оптимизирован для больших массивов данных, однако производительность зависит от:
Рекомендации:
При увеличении плотности точек используется кластеризация, однако она изменяет семантику данных. Point layer сохраняет исходные записи, что важно для аналитики.
Сравнение:
| Подход | Сохранение данных | Производительность | Семантика |
|---|---|---|---|
| Point layer | полное | средняя | точная |
| Clustering | частичное | высокая | агрегированная |
Point layer поддерживает выражения для динамического стиля:
visConfig: {
colorScale: "quantile",
colorField: {
name: "value",
type: "real"
}
}
Это позволяет автоматически распределять цвета по статистическим свойствам данных.
Point layer интегрирован в событийную систему Kepler.gl:
Пример обработчика:
const onLayerCl ick = (info) => {
if (info && info.object) {
console.log(info.object.properties);
}
};
Любые дополнительные поля могут участвовать в визуализации:
Пример:
columns: {
lat: "lat",
lng: "lng",
weight: "importance"
}
Point layer применяется в задачах:
Несмотря на гибкость, слой имеет ограничения:
Эти ограничения компенсируются комбинацией с heatmap и grid layer в Kepler.gl.