HeatmapLayer предназначен для отображения плотности точек на карте в виде непрерывного теплового поля. Он преобразует набор координатных данных в растровое представление, где интенсивность цвета отражает концентрацию объектов в конкретной области. Такой подход позволяет быстро выявлять кластеры, горячие зоны и распределение явлений в пространстве без необходимости анализа отдельных маркеров.
HeatmapLayer основан на агрегации точек в пространстве экрана. Каждая точка влияет на окружающую область, формируя «вклад» в итоговую карту плотности. Этот вклад распространяется радиально, убывая по мере удаления от центра.
Основные этапы обработки данных:
В отличие от кластеризации, HeatmapLayer не группирует точки в дискретные объекты. Он строит непрерывное поле значений.
HeatmapLayer работает с массивом объектов, содержащих координаты. Минимальный набор данных:
Пример структуры:
const data = [
{ position: [37.77, -122.41], weight: 1 },
{ position: [37.78, -122.42], weight: 0.5 },
{ position: [37.76, -122.40], weight: 2 }
];
При отсутствии weight каждая точка считается равнозначной.
Layer интегрируется в систему Deck.gl через массив слоёв.
import {Deck} from '@deck.gl/core';
import {HeatmapLayer} from '@deck.gl/aggregation-layers';
const layer = new HeatmapLayer({
id: 'heatmap-layer',
data,
getPosition: d => d.position,
getWeight: d => d.weight,
radiusPixels: 60,
intensity: 1,
threshold: 0.05
});
const deck = new Deck({
initialViewState: {
longitude: 37.77,
latitude: -122.41,
zoom: 12
},
controller: true,
layers: [layer]
});
Определяет радиус влияния каждой точки в пикселях.
Фактически параметр управляет степенью размытия.
Множитель общей интенсивности слоя. Используется для усиления или ослабления цветового отклика без изменения исходных данных.
Порог отображения слабых значений плотности. Используется для фильтрации фонового шума.
Массив цветов, задающий градиент тепловой карты.
colorRange: [
[0, 0, 255],
[0, 255, 255],
[0, 255, 0],
[255, 255, 0],
[255, 0, 0]
]
Цветовая шкала интерполируется от холодных оттенков к тёплым.
Функция извлечения координат из объекта данных. Обязательный параметр.
getPosition: d => d.position
Определяет вклад каждой точки. Используется для моделирования неоднородных данных.
getWeight: d => d.weight || 1
HeatmapLayer использует пространственную агрегацию на GPU. Каждая точка преобразуется в вклад, распределяемый по текстурной сетке.
Упрощённая модель:
Каждая точка создаёт гауссово распределение влияния:
[ w(x, y) = e^{-}]
Значения суммируются в пикселях текстуры.
Применяется нормализация относительно максимального значения.
Итоговое поле интерпретируется как интенсивность цвета.
GPU-реализация обеспечивает обработку больших массивов данных в реальном времени.
HeatmapLayer чувствителен к уровню зума:
Это означает, что визуальный результат зависит от плотности пикселей экрана, а не от реального расстояния.
HeatmapLayer рассчитан на работу с большими наборами данных, однако эффективность зависит от нескольких факторов:
Увеличение радиуса экспоненциально повышает нагрузку на GPU, так как расширяется область влияния каждой точки.
Deck.gl выполняет агрегацию на уровне текстур, что уменьшает количество операций рендеринга.
Снижение плотности точек перед передачей в слой уменьшает нагрузку:
HeatmapLayer не интерпретирует данные семантически — только визуально. Цвета отражают относительную плотность.
Часто используется логарифмическая или нормализованная шкала:
Важным аспектом является корректная настройка контраста через intensity и threshold, так как они влияют на восприятие распределения.
В одной сцене возможно использование нескольких тепловых слоёв:
При наложении слоёв важно учитывать прозрачность и порядок рендеринга.
HeatmapLayer часто комбинируется с:
В отличие от HexagonLayer, HeatmapLayer не использует геометрическую сетку, что делает его визуально более плавным.
HeatmapLayer имеет ряд фундаментальных ограничений:
При сильной концентрации данных возможна «пересветка» областей, когда различия внутри плотных зон становятся неразличимыми.
Layer поддерживает динамическое обновление:
Пересчёт происходит автоматически, что позволяет использовать HeatmapLayer в потоковых системах визуализации.
Интерполяция значений выполняется в экранном пространстве. Это означает:
Такой подход обеспечивает стабильную визуализацию независимо от проекции карты.
Поведение HeatmapLayer можно представить как функцию:
[ F(x, y) = _{i=1}^{n} w_i K(d((x, y), p_i))]
где:
Эта модель лежит в основе всех тепловых визуализаций в Deck.gl.
Комбинация параметров формирует итоговый стиль отображения:
Баланс этих параметров определяет читаемость карты плотности.