Плотность тепловой карты в Mapbox GL JS напрямую зависит от
параметров визуализации слоя типа heatmap. Одним из
ключевых параметров, определяющих характер сглаживания и радиус влияния
каждой точки, является heatmap-radius. Этот параметр
управляет тем, насколько далеко распространяется вклад каждой точки
данных при расчёте интенсивности тепла.
heatmap-radius определяет радиус влияния каждой точки
данных в пикселях. Чем больше значение, тем более «размытой» и
обобщённой становится тепловая карта. Чем меньше — тем более
локализованной и точечной.
r =
Фактически параметр задаёт область вокруг каждой точки, в пределах которой она влияет на итоговую интенсивность слоя.
Каждая точка данных в heatmap воспринимается как центр распределения
плотности. Влияние точки убывает по мере удаления от центра.
heatmap-radius определяет максимальную границу этого
влияния.
При увеличении радиуса:
При уменьшении радиуса:
heatmap-radius необходимо интерпретировать вместе с
плотностью входных данных. Один и тот же радиус может давать разные
визуальные эффекты в зависимости от количества точек.
При высокой плотности данных:
При низкой плотности данных:
heatmap-radius поддерживает выражения и может изменяться
динамически в зависимости от масштаба карты (zoom). Это
позволяет адаптировать визуализацию к уровню детализации.
Типичный подход — увеличение радиуса при уменьшении масштаба карты:
r(z) = a z + b
где:
z — уровень zoom;a, b — коэффициенты линейной
зависимости.На практике чаще используется экспоненциальная или ступенчатая интерполяция, чтобы более точно контролировать визуальное восприятие.
В Mapbox GL JS параметр heatmap-radius может задаваться
через interpolate, что позволяет плавно менять радиус при
изменении масштаба.
Пример логики:
Такой подход обеспечивает стабильную читаемость карты на всех уровнях приближения.
Значение heatmap-radius всегда задаётся в пикселях
экрана, а не в метрах или географических единицах. Это означает:
Таким образом, радиус — экранно-ориентированный параметр, тесно связанный с визуальным масштабом.
Heatmap в Mapbox GL JS основан на принципах Kernel Density Estimation
(KDE). heatmap-radius фактически задаёт ширину ядра функции
распределения.
Обобщённая модель влияния точки:
K(x) = e^{-}
где:
d(x, x_i) — расстояние до точки;r — радиус влияния (heatmap-radius);K(x) — вклад точки в интенсивность.При увеличении r распределение становится более пологим,
при уменьшении — более острым.
heatmap-radius не работает изолированно. Его визуальный
эффект тесно связан с heatmap-weight.
heatmap-radius определяет геометрию влияния;heatmap-weight определяет силу влияния каждой
точки.При одинаковом радиусе увеличение веса усиливает интенсивность, но не расширяет область влияния. И наоборот, увеличение радиуса расширяет область, но не обязательно увеличивает пиковую интенсивность.
Увеличение heatmap-radius влияет на производительность,
поскольку увеличивает количество пикселей, участвующих в вычислениях для
каждой точки.
Основные последствия:
Баланс достигается подбором минимального радиуса, обеспечивающего визуальную целостность.
Типовые диапазоны значений:
Эти значения не являются фиксированными правилами, но отражают общие принципы восприятия плотности.
При изменении zoom радиус может восприниматься по-разному:
Это создаёт эффект стабильной плотности при разных уровнях приближения при правильно настроенной интерполяции радиуса.
Step-выражения позволяют задавать дискретные изменения радиуса:
r(z) =Такой подход используется для резких переходов между уровнями детализации, когда плавная интерполяция не требуется.
heatmap-radius влияет не только на технические
характеристики слоя, но и на восприятие данных:
Правильная настройка радиуса определяет читаемость тепловой карты и её аналитическую ценность.