Тепловые карты в веб-картографии применяются для визуализации плотности точек, интенсивности событий и распределённых данных. Плагин Leaflet.heat добавляет к Leaflet слой, способный интерпретировать набор координат как непрерывное поле значений и отображать его в виде градиентного «теплового» слоя.
Основой визуализации выступает алгоритм сглаживания на основе ядровых функций, где каждая точка влияет на соседнюю область с затухающей интенсивностью. Итоговое изображение формируется через canvas-рендеринг, что обеспечивает высокую производительность даже при работе с тысячами точек.
Leaflet.heat использует слой L.HeatLayer, который
интегрируется в стандартную систему слоёв Leaflet.
Ключевые особенности:
Каждая точка задаётся в формате:
[lat, lng, intensity]
где intensity — числовой коэффициент влияния (обычно от
0 до 1).
Leaflet.heat не входит в базовую поставку Leaflet и подключается отдельно.
Подключение через CDN:
<script src="https://unpkg.com/leaflet.heat/dist/leaflet-heat.js"></script>
После подключения становится доступен класс
L.heatLayer.
Минимальная конфигурация слоя тепловой карты:
const points = [
[51.505, -0.09, 0.5],
[51.51, -0.1, 0.8],
[51.49, -0.08, 0.3]
];
const heat = L.heatLayer(points).addTo(map);
Слой автоматически интерпретирует массив координат и строит распределение плотности.
Конфигурация слоя позволяет управлять поведением визуализации:
L.heatLayer(data, {
radius: 25,
blur: 15,
maxZoom: 17,
max: 1.0,
gradient: {
0.0: 'blue',
0.4: 'lime',
0.7: 'yellow',
1.0: 'red'
}
});
Определяет радиус влияния точки в пикселях. Чем больше значение, тем более сглаженной становится карта.
Степень размытия границ. Высокие значения уменьшают резкость переходов между зонами интенсивности.
Zoom-уровень, на котором рассчитывается максимальная детализация данных.
Максимальное значение интенсивности, используемое для нормализации.
Цветовая шкала, задающая интерпретацию значений от минимальной до максимальной интенсивности.
Источник данных может включать:
Пример преобразования массива объектов:
const raw = [
{ lat: 51.505, lng: -0.09, count: 10 },
{ lat: 51.51, lng: -0.1, count: 25 }
];
const heatPoints = raw.map(p => [p.lat, p.lng, p.count / 25]);
Нормализация значений позволяет корректно отображать относительную интенсивность.
HeatLayer поддерживает динамическое обновление:
heat.setLatLngs(newPoints);
или полную замену:
map.removeLayer(heat);
heat = L.heatLayer(updatedPoints, options).addTo(map);
Это важно при работе с потоковыми данными или интерактивными фильтрами.
HeatLayer можно синхронизировать с состоянием карты:
map.on('moveend', () => {
const bounds = map.getBounds();
const filtered = points.filter(p =>
bounds.contains([p[0], p[1]])
);
heat.setLatLngs(filtered);
});
Такой подход используется для локальной агрегации данных по видимой области.
Работа с тепловыми картами требует учёта вычислительной нагрузки:
При больших объёмах данных применяется предобработка на сервере с передачей уже агрегированных точек.
Градиенты играют ключевую роль в интерпретации тепловых карт. Используются схемы:
Корректная настройка градиента влияет на читаемость плотностных распределений и выявление кластеров.
Третий параметр каждой точки позволяет моделировать вес:
[lat, lng, weight]
Применение:
Без этого параметра все точки считаются равнозначными, что искажает распределение.
HeatLayer может комбинироваться с:
L.marker)L.polygon)L.tileLayer)Leaflet.markercluster)Типичный сценарий — наложение тепловой карты поверх базовой карты и маркеров ключевых точек.
При изменении zoom-уровня происходит перерасчёт пиксельной плотности. Это влияет на:
На низких zoom-уровнях отображается глобальная картина распределения, на высоких — локальные пики плотности.
Распространённые проблемы:
Корректный порядок всегда [lat, lng, intensity], а не
[lng, lat].
При работе с большими массивами применяется подход биннинга:
Это снижает количество точек с сотен тысяч до нескольких тысяч без потери смысловой нагрузки.
HeatLayer не отображает абсолютные значения, а показывает относительную плотность. Поэтому:
Такая визуализация используется для анализа пространственных паттернов и выявления аномалий в данных.