Heatmap-intensity

В Mapbox GL JS слой тепловой карты (heatmap layer) использует набор визуальных параметров для преобразования плотности точек в непрерывное распределение цвета. Одним из ключевых параметров является heatmap-intensity, управляющий общей «силой» визуализации без изменения исходных данных.


Роль heatmap-intensity в рендеринге тепловой карты

heatmap-intensity масштабирует влияние всех точек данных на итоговую плотность. В отличие от heatmap-weight, который задаёт вклад отдельного объекта, интенсивность влияет на всю карту целиком.

Формально:

  • увеличивает или уменьшает вклад всех точек одновременно
  • не изменяет геометрию данных
  • работает как глобальный множитель плотности
  • может зависеть от масштаба (zoom-dependent styling)

При низких значениях карта выглядит «разреженной», при высоких — зоны концентрации становятся более агрессивными и яркими.


Синтаксис свойства

paint: {
  "heatmap-intensity": 1
}

Базовое значение обычно равно 1, что соответствует нейтральной интенсивности.


Интерполяция и zoom-dependent управление

Одно из наиболее мощных применений heatmap-intensity — динамическое изменение интенсивности в зависимости от масштаба карты.

Линейная интерполяция

paint: {
  "heatmap-intensity": [
    "interpolate",
    ["linear"],
    ["zoom"],
    0, 0.5,
    10, 1,
    15, 2
  ]
}

Поведение:

  • на малых масштабах (zoom 0–5) карта почти «приглушена»
  • на средних масштабах (zoom ~10) достигается базовая интенсивность
  • на крупных масштабах (zoom 15+) плотность усиливается

Экспоненциальная интерполяция

paint: {
  "heatmap-intensity": [
    "interpolate",
    ["exponential", 1.5],
    ["zoom"],
    5, 0.3,
    12, 1,
    18, 3
  ]
}

Экспонента позволяет быстрее усиливать эффект при приближении, создавая более «контрастное» поведение тепловой карты.


Взаимодействие с heatmap-weight

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

При увеличении интенсивности визуально увеличивается зона влияния точек, даже если радиус остаётся неизменным.

"heatmap-radius": 20,
"heatmap-intensity": 2

Эффект: плотные зоны становятся шире и более «слившимися».


heatmap-opacity

Высокая интенсивность усиливает насыщенность плотных областей, что часто требует компенсации через прозрачность.

"heatmap-opacity": [
  "interpolate",
  ["linear"],
  ["zoom"],
  10, 0.6,
  15, 0.9
]

heatmap-color

Интенсивность изменяет распределение значений плотности, влияя на то, какие цвета активируются в градиенте.

"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
]

Типовые ошибки настройки

Чрезмерное увеличение значения

Слишком высокая интенсивность приводит к:

  • слиянию всех точек в единое пятно
  • потере градиентной структуры
  • невозможности различать локальные максимумы

Отсутствие зависимости от zoom

Фиксированное значение:

"heatmap-intensity": 2

приводит к визуальной нестабильности при переключении масштабов: карта может быть либо слишком «жёсткой», либо слишком «размытой» в разных режимах.


Конфликт с weight

При высокой heatmap-weight и высокой интенсивности возникает эффект перенасыщения:

  • цвета быстро достигают максимума
  • градиент перестаёт быть информативным
  • теряется различие между средними и высокими значениями

Математическая интерпретация влияния

Внутренне плотность можно представить как:

[ D(x) = I(z) w_i K(x, x_i)]

где:

  • ( I(z) ) — heatmap-intensity как функция zoom
  • ( w_i ) — heatmap-weight
  • ( K ) — ядро распределения (kernel density function)
  • ( x_i ) — координаты точек

Таким образом, интенсивность линейно масштабирует результат всей функции плотности.


Комбинации для различных сценариев

Анализ плотности событий

"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
]

Применимо для:

  • анализа трафика
  • мобильной активности
  • точечных датчиков IoT

Производительность и визуальная стабильность

Хотя heatmap-intensity не влияет напрямую на вычислительную сложность, он косвенно влияет на:

  • визуальную перегруженность слоя
  • необходимость перерисовки цветов
  • восприятие плавности переходов

При высоких значениях часто требуется балансировка:

  • уменьшение heatmap-radius
  • корректировка heatmap-opacity
  • перераспределение heatmap-color

Поведение при разных плотностях данных

Низкая плотность

  • интенсивность усиливает отдельные точки
  • тепловая карта становится «зернистой»

Средняя плотность

  • формируются устойчивые кластеры
  • градиенты становятся читаемыми

Высокая плотность

  • возможен эффект «заливки»
  • важна точная настройка интерполяции intensity

Связь с восприятием данных

Изменение heatmap-intensity фактически управляет тем, как пользователь интерпретирует плотность:

  • низкая интенсивность → акцент на структуре распределения
  • высокая интенсивность → акцент на экстремумах и кластерах

Это делает параметр не только техническим, но и семантическим инструментом визуализации данных.