В Mapbox GL JS слой тепловой карты (heatmap layer) использует набор
визуальных параметров для преобразования плотности точек в непрерывное
распределение цвета. Одним из ключевых параметров является
heatmap-intensity, управляющий общей «силой» визуализации
без изменения исходных данных.
heatmap-intensity масштабирует влияние всех точек данных
на итоговую плотность. В отличие от heatmap-weight, который
задаёт вклад отдельного объекта, интенсивность влияет на всю карту
целиком.
Формально:
При низких значениях карта выглядит «разреженной», при высоких — зоны концентрации становятся более агрессивными и яркими.
paint: {
"heatmap-intensity": 1
}
Базовое значение обычно равно 1, что соответствует
нейтральной интенсивности.
Одно из наиболее мощных применений heatmap-intensity —
динамическое изменение интенсивности в зависимости от масштаба
карты.
paint: {
"heatmap-intensity": [
"interpolate",
["linear"],
["zoom"],
0, 0.5,
10, 1,
15, 2
]
}
Поведение:
paint: {
"heatmap-intensity": [
"interpolate",
["exponential", 1.5],
["zoom"],
5, 0.3,
12, 1,
18, 3
]
}
Экспонента позволяет быстрее усиливать эффект при приближении, создавая более «контрастное» поведение тепловой карты.
heatmap-intensity редко используется изолированно. Его
влияние раскрывается в связке с heatmap-weight.
Пример:
paint: {
"heatmap-weight": [
"interpolate",
["linear"],
["get", "value"],
0, 0,
6, 1
],
"heatmap-intensity": [
"interpolate",
["linear"],
["zoom"],
8, 0.5,
14, 2
]
}
Разделение ролей:
heatmap-weight — локальная значимость каждой точкиheatmap-intensity — глобальная чувствительность
слояХотя heatmap-intensity напрямую не задаёт цвет или
радиус, он влияет на восприятие всех связанных свойств:
При увеличении интенсивности визуально увеличивается зона влияния точек, даже если радиус остаётся неизменным.
"heatmap-radius": 20,
"heatmap-intensity": 2
Эффект: плотные зоны становятся шире и более «слившимися».
Высокая интенсивность усиливает насыщенность плотных областей, что часто требует компенсации через прозрачность.
"heatmap-opacity": [
"interpolate",
["linear"],
["zoom"],
10, 0.6,
15, 0.9
]
Интенсивность изменяет распределение значений плотности, влияя на то, какие цвета активируются в градиенте.
"heatmap-color": [
"interpolate",
["linear"],
["heatmap-density"],
0, "rgba(0,0,255,0)",
0.2, "blue",
0.4, "cyan",
0.6, "lime",
0.8, "yellow",
1, "red"
]
При увеличении heatmap-intensity зоны высоких значений
(0.6–1) начинают появляться чаще.
На уровне страны или региона чрезмерная интенсивность приводит к потере структуры данных.
"heatmap-intensity": [
"interpolate",
["linear"],
["zoom"],
0, 0.2,
6, 0.6,
10, 1
]
При детальном рассмотрении требуется выделить локальные кластеры.
"heatmap-intensity": [
"interpolate",
["linear"],
["zoom"],
10, 1,
14, 2.5,
18, 3
]
Слишком высокая интенсивность приводит к:
Фиксированное значение:
"heatmap-intensity": 2
приводит к визуальной нестабильности при переключении масштабов: карта может быть либо слишком «жёсткой», либо слишком «размытой» в разных режимах.
При высокой heatmap-weight и высокой интенсивности
возникает эффект перенасыщения:
Внутренне плотность можно представить как:
[ D(x) = I(z) w_i K(x, x_i)]
где:
heatmap-intensity как функция zoomheatmap-weightТаким образом, интенсивность линейно масштабирует результат всей функции плотности.
"heatmap-intensity": [
"interpolate",
["linear"],
["zoom"],
6, 0.8,
12, 1.5,
16, 2.5
]
Подходит для:
"heatmap-intensity": [
"interpolate",
["linear"],
["zoom"],
0, 0.3,
8, 0.7,
14, 1.2
]
Используется при:
"heatmap-intensity": [
"interpolate",
["linear"],
["zoom"],
12, 1,
16, 2,
20, 3
]
Применимо для:
Хотя heatmap-intensity не влияет напрямую на
вычислительную сложность, он косвенно влияет на:
При высоких значениях часто требуется балансировка:
heatmap-radiusheatmap-opacityheatmap-colorИзменение heatmap-intensity фактически управляет тем,
как пользователь интерпретирует плотность:
Это делает параметр не только техническим, но и семантическим инструментом визуализации данных.