Свойство heatmap-color определяет цветовую шкалу
тепловой карты в слое типа heatmap. Оно отвечает за
преобразование плотности данных (density) в визуальное представление
цвета и является ключевым инструментом для интерпретации распределения
точек.
В Mapbox GL JS цвет тепловой карты задаётся через интерполяцию значений плотности, нормализованных в диапазоне от 0 до 1. Эти значения не являются абсолютными координатами или количествами объектов — это результат внутреннего расчёта веса и плотности точек в пиксельной сетке.
Свойство heatmap-color относится к paint-параметрам
слоя:
map.addLayer({
id: 'heatmap-layer',
type: 'heatmap',
source: 'points',
paint: {
'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'
]
}
});
В этом выражении используется выражение интерполяции
(interpolate), которое связывает числовое значение
плотности с конкретным цветом.
Внутренний параметр heatmap-density вычисляется для
каждого пикселя слоя. Он зависит от:
heatmap-weight)heatmap-radius)Значение всегда нормализовано в диапазоне:
0 → нет влияния точек
1 → максимальная плотность
Именно это значение подаётся в heatmap-color для
преобразования в цвет.
Наиболее часто используется функция:
['interpolate', ['linear'], ['heatmap-density'], ...]
Интерполяция строит непрерывный градиент между заданными контрольными точками:
density → color
Пример логики:
Mapbox вычисляет промежуточные цвета автоматически.
'heatmap-color': [
'interpolate',
['linear'],
['heatmap-density'],
0, 'rgba(33,102,172,0)',
0.2, 'rgb(103,169,207)',
0.4, 'rgb(209,229,240)',
0.6, 'rgb(253,219,199)',
0.8, 'rgb(239,138,98)',
1, 'rgb(178,24,43)'
]
Такой набор создаёт визуальную модель от холодных к тёплым цветам, что удобно для отображения плотности событий.
Цвета в heatmap-color часто содержат альфа-канал. Это
позволяет:
Пример:
0, 'rgba(0, 0, 255, 0)'
Нулевая плотность полностью прозрачна, что сохраняет читаемость карты.
Хотя heatmap-color работает с
heatmap-density, итоговое распределение сильно зависит от
веса точек:
'heatmap-weight': [
'interpolate',
['linear'],
['get', 'value'],
0, 0,
10, 1
]
Если веса увеличиваются, плотность возрастает, и цветовая шкала начинает «сдвигаться» в сторону более горячих оттенков.
Цветовая интерпретация часто комбинируется с масштабом карты:
'heatmap-intensity': [
'interpolate',
['linear'],
['zoom'],
0, 1,
9, 3
]
Хотя это не напрямую heatmap-color, визуально оно влияет
на восприятие цветов, так как изменяет плотность.
Вместо плавной интерполяции можно использовать дискретные зоны:
'heatmap-color': [
'step',
['heatmap-density'],
'blue',
0.3, 'cyan',
0.6, 'yellow',
0.9, 'red'
]
Человеческое восприятие плотности нелинейно. Поэтому часто применяются нелинейные схемы через:
Пример:
['interpolate', ['exponential', 1.5], ['heatmap-density'], ...]
Повышенный коэффициент делает переходы более контрастными в высоких значениях.
Используются холодные и прозрачные цвета:
Такое распределение соответствует интуитивной температурной модели.
Если первый цвет не имеет alpha = 0, карта становится перегруженной:
0, 'blue' // ошибка визуальной читаемости
Значения density должны строго возрастать:
0 → 0.2 → 0.5 → 1
Нарушение приводит к некорректной интерполяции.
heatmap-radius изменяет область влияния точек, что
напрямую влияет на распределение цвета:
'heatmap-radius': [
'interpolate',
['linear'],
['zoom'],
0, 2,
9, 20
]
При увеличении радиуса цветовые зоны становятся более гладкими и широкими.
В сложных приложениях heatmap-color может изменяться в
зависимости от:
Пример зависимости от zoom:
'heatmap-color': [
'interpolate',
['linear'],
['zoom'],
0,
[
'interpolate',
['linear'],
['heatmap-density'],
0, 'blue',
1, 'red'
],
10,
[
'interpolate',
['linear'],
['heatmap-density'],
0, 'green',
1, 'yellow'
]
]
При проектировании heatmap-color учитываются три уровня:
Эти уровни должны быть согласованы, иначе тепловая карта теряет информативность.
heatmap-color часто применяется в:
В каждом случае цветовая шкала настраивается под диапазон данных, а не под фиксированные значения.
Хотя heatmap-color не является вычислительно тяжёлым
параметром, сложные выражения:
Рекомендуется избегать избыточной вложенности выражений.
Эффективная тепловая карта достигается балансом:
Чрезмерное количество цветов ухудшает интерпретацию данных.