При работе с геопространственными данными часто возникает необходимость выявлять участки, ограничивающие пропускную способность транспортной системы, логистической сети, инженерной инфраструктуры или процессов перемещения объектов. Такие участки принято называть узкими местами (bottlenecks).
В контексте визуальной аналитики Bottleneck-анализ представляет собой совокупность методов поиска зон, где наблюдаются:
Kepler.gl не содержит отдельного инструмента под названием «Bottleneck Analysis», однако предоставляет набор визуальных механизмов, позволяющих эффективно обнаруживать подобные проблемные области на основе пространственных и временных данных.
Традиционный анализ узких мест часто выполняется через SQL-запросы, статистические отчеты или специализированные алгоритмы оптимизации графов. Однако визуализация позволяет выявлять закономерности значительно быстрее.
При отображении данных на карте становятся заметны:
Kepler.gl особенно эффективен для такого анализа благодаря сочетанию:
Наиболее распространенный сценарий.
Исходные данные:
| Поле | Описание |
|---|---|
| vehicle_id | идентификатор автомобиля |
| latitude | широта |
| longitude | долгота |
| timestamp | время фиксации |
| speed | скорость |
Задача заключается в поиске участков дорог, где скорость систематически снижается.
Признаки узкого места:
Источник данных:
Bottleneck-анализ позволяет определить:
Логистические компании собирают GPS-треки грузовиков.
Потенциальные узкие места:
Kepler.gl помогает визуально определить точки скопления транспорта.
Источники данных:
Узкие места проявляются как зоны высокой концентрации посетителей.
Примеры:
Для качественного анализа необходимы пространственные координаты.
Пример:
[
{
id: 1,
latitude: 55.751244,
longitude: 37.618423,
speed: 12,
timestamp: "2025-01-01T12:00:00Z"
},
{
id: 2,
latitude: 55.752100,
longitude: 37.619000,
speed: 8,
timestamp: "2025-01-01T12:01:00Z"
}
]
Перед загрузкой данных часто рассчитывают:
const congestionIndex =
trafficDensity / averageSpeed;
Или:
const delay =
actualTime - expectedTime;
Подобные метрики позволяют строить более информативные карты.
Heatmap Layer отображает плотность объектов.
Чем больше точек попадает в область, тем интенсивнее цвет.
Создание слоя:
const config = {
layers: [
{
type: "heatmap",
config: {
dataId: "traffic"
}
}
]
};
Высокая интенсивность может означать:
Важно учитывать контекст данных.
Высокая плотность сама по себе не всегда является проблемой.
Например, парковка возле торгового центра может иметь высокую плотность объектов без возникновения bottleneck.
Hexagon Layer разбивает территорию на шестиугольные ячейки.
Каждая ячейка агрегирует статистику по попавшим в нее объектам.
Пример настройки:
{
type: "hexagon",
config: {
dataId: "traffic",
columns: {
lat: "latitude",
lng: "longitude"
}
}
}
Для поиска узких мест часто используется метрика Count.
Она показывает число записей внутри ячейки.
Если определенный сегмент дороги стабильно демонстрирует высокий Count, это потенциальный bottleneck.
Более информативным подходом является использование среднего значения скорости.
Пример агрегации:
{
field: "speed",
aggregation: "average"
}
Тогда ячейки будут отображать не количество объектов, а среднюю скорость движения.
Низкая скорость при высокой плотности обычно является сильным индикатором перегрузки.
Grid Layer работает аналогично Hexagon Layer, но использует квадратные ячейки.
Преимущества:
Для Bottleneck-анализа Grid Layer часто применяется при обработке больших территорий.
Например:
Arc Layer позволяет отображать перемещения между двумя точками.
Пример данных:
{
source_lat: 55.75,
source_lng: 37.61,
target_lat: 55.80,
target_lng: 37.70
}
Если множество дуг проходят через одинаковые участки пространства, появляются признаки концентрации потока.
Пример:
Высокая концентрация маршрутов часто приводит к возникновению узких мест.
Line Layer позволяет визуализировать реальные дорожные маршруты.
Пример объекта:
{
path: [
[37.61, 55.75],
[37.62, 55.76],
[37.63, 55.77]
]
}
Наиболее часто анализируются:
Цвет линии может отображать уровень нагрузки.
Пример:
{
colorField: {
name: "congestion"
}
}
Красные сегменты обычно указывают на проблемные зоны.
Многие узкие места существуют не постоянно.
Например:
Поэтому пространственного анализа недостаточно.
Kepler.gl поддерживает временную анимацию через поле времени.
Пример:
{
timestamp: "2025-06-01T08:30:00Z"
}
После настройки Time Filter появляется возможность воспроизводить движение объектов во времени.
Часто обнаруживаются следующие сценарии:
| Время | Состояние |
|---|---|
| 06:00 | свободное движение |
| 08:00 | формирование затора |
| 09:00 | пик нагрузки |
| 11:00 | восстановление движения |
Такой подход позволяет выявлять не только место возникновения bottleneck, но и момент его появления.
Позволяют ограничить анализ конкретным районом.
Например:
{
city: "Moscow"
}
Фильтрация по времени позволяет сравнивать периоды:
Особенно полезна при транспортном анализе.
Например:
speed < 10
После применения фильтра остаются только медленно движущиеся объекты.
Карта начинает показывать исключительно потенциальные узкие места.
Для более точного анализа данные часто дополняют специальным показателем.
Пример:
function calculateCongestion(
density,
speed
) {
return density / speed;
}
Чем выше значение, тем сильнее перегрузка.
После вычисления поле можно использовать как основу цветовой схемы.
{
colorField: {
name: "congestionIndex"
}
}
В результате карта начинает отображать степень перегруженности напрямую.
При работе с миллионами записей возникают ограничения:
Снижение объема данных:
SEL ECT *
FR OM gps_points
WH ERE timestamp >= NOW() - INTERVAL '1 day'
Агрегация на стороне сервера:
SELECT
cell_id,
AVG(speed) AS avg_speed,
COUNT(*) AS vehicles
FR OM traffic
GROUP BY cell_id
Предварительное вычисление индексов:
record.congestion =
record.density /
record.speed;
Такой подход значительно уменьшает нагрузку на клиентскую часть.
Часто Kepler.gl используется как визуальный слой поверх аналитической платформы.
Типичный конвейер:
GPS данные
↓
ETL обработка
↓
Агрегация
↓
Расчет congestion score
↓
GeoJSON / CSV
↓
Kepler.gl
Этап 1. Сбор GPS-треков:
vehicle_id
timestamp
latitude
longitude
speed
Этап 2. Расчет средней скорости по сегментам дорог.
Этап 3. Построение Hexagon Layer.
Этап 4. Настройка цветовой шкалы по средней скорости.
Этап 5. Добавление временной анимации.
Этап 6. Фильтрация участков со скоростью ниже порога:
speed < 15
Этап 7. Анализ зон с максимальной плотностью объектов.
Результатом становится карта, на которой визуально выделяются:
Несмотря на мощные средства визуализации, Kepler.gl не выполняет:
Подобные задачи обычно решаются во внешних системах:
После вычислений результаты импортируются в Kepler.gl для визуального исследования и интерактивного анализа обнаруженных узких мест.