Настройка интенсивности

Параметр «интенсивность» в MapLibre GL JS относится к группе стилевых свойств, которые управляют визуальной выразительностью слоёв: насыщенностью эффекта, силой визуального воздействия и степенью «агрессивности» отображения данных. В отличие от геометрических параметров, интенсивность влияет исключительно на рендеринг и восприятие слоя, не изменяя исходные данные.

В рамках спецификации стилей MapLibre GL JS интенсивность встречается в нескольких ключевых контекстах: тепловые карты, затенение рельефа, трёхмерные выдавленные объекты и некоторые растровые эффекты. Каждая из этих систем использует собственный механизм масштабирования визуального эффекта.


Интенсивность тепловых карт (heatmap-intensity)

Тепловые карты являются одним из наиболее характерных примеров применения параметра интенсивности. Свойство heatmap-intensity управляет тем, насколько резко и контрастно отображаются скопления точек.

map.addLayer({
  id: 'heatmap-layer',
  type: 'heatmap',
  source: 'points',
  paint: {
    'heatmap-intensity': 1.0
  }
});

Значение интенсивности влияет на алгоритм интерполяции плотности:

  • Низкие значения (0.1–0.5) — плавное распределение тепла, мягкие градиенты, низкая контрастность
  • Средние значения (0.5–1.5) — баланс между локальными скоплениями и общим фоном
  • Высокие значения (1.5–3.0 и выше) — резкое выделение кластеров, высокая чувствительность к плотности точек

Интенсивность часто используется совместно с масштабными выражениями:

'heatmap-intensity': [
  'interpolate',
  ['linear'],
  ['zoom'],
  0, 0.5,
  10, 1,
  15, 2
]

Такой подход позволяет изменять визуальную плотность тепловой карты в зависимости от масштаба, компенсируя изменение плотности пикселей на экране.


Интенсивность затенения рельефа (hillshade-exaggeration)

В слое hillshade интенсивность выражается через параметр hillshade-exaggeration, который усиливает или ослабляет эффект рельефного освещения.

map.addLayer({
  id: 'terrain-shading',
  type: 'hillshade',
  source: 'terrain-source',
  paint: {
    'hillshade-exaggeration': 0.5
  }
});

Физически этот параметр масштабирует перепады высот, влияя на расчёт нормалей поверхности. Чем выше значение, тем более выраженными становятся тени и световые переходы.

Характерные диапазоны:

  • 0–0.3 — почти плоское отображение рельефа
  • 0.3–1.0 — реалистичная визуализация местности
  • 1.0–3.0 — художественное усиление рельефа

При использовании выражений возможно динамическое управление в зависимости от масштаба:

'hillshade-exaggeration': [
  'interpolate',
  ['linear'],
  ['zoom'],
  5, 0.3,
  10, 1,
  14, 2
]

Интенсивность выдавливания (fill-extrusion-height и визуальная сила 3D)

В слоях типа fill-extrusion прямого параметра «intensity» нет, однако аналогичная роль распределяется между высотой, цветом и непрозрачностью, формируя эффект визуальной интенсивности.

map.addLayer({
  id: 'buildings-3d',
  type: 'fill-extrusion',
  source: 'buildings',
  paint: {
    'fill-extrusion-height': ['get', 'height'],
    'fill-extrusion-opacity': 0.8
  }
});

Визуальная «интенсивность» 3D-слоя фактически складывается из нескольких факторов:

  • высота (fill-extrusion-height) — базовый вклад в выраженность формы
  • непрозрачность — плотность восприятия массы
  • цветовая насыщенность — контраст между объектами
  • освещение сцены (light) — глубина теней

Комбинация этих параметров позволяет эмулировать эффект «усиления» или «ослабления» городской застройки.


Масштабная интенсивность через выражения

Одним из ключевых механизмов управления интенсивностью является использование expression API. Оно позволяет формировать непрерывные функции зависимости визуальных параметров от масштаба, данных или условий.

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

'heatmap-intensity': [
  'case',
  ['>', ['get', 'density'], 10],
  2,
  0.5
]

Здесь интенсивность становится дискретной функцией от атрибута источника данных.

Другой вариант — нормализация по масштабу:

'heatmap-intensity': [
  '*',
  1,
  ['/', ['zoom'], 10]
]

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


Связь интенсивности и цветовых интерполяций

Интенсивность часто взаимодействует с цветовыми свойствами, особенно в heatmap и raster слоях. Хотя цвет задаётся отдельно, визуально он воспринимается как функция от интенсивности.

'heatmap-color': [
  'interpolate',
  ['linear'],
  ['heatmap-density'],
  0, 'rgba(0,0,255,0)',
  0.5, 'rgba(0,255,0,0.5)',
  1, 'rgba(255,0,0,1)'
]

Увеличение интенсивности приводит к более быстрому достижению верхних порогов цветовой шкалы, что усиливает контраст и ускоряет переходы между цветами.


Интенсивность растровых слоёв

В растровых слоях MapLibre GL JS интенсивность может быть интерпретирована через свойства яркости и контраста, хотя формально они не называются intensity.

map.addLayer({
  id: 'raster-layer',
  type: 'raster',
  source: 'satellite',
  paint: {
    'raster-brightness-min': 0.2,
    'raster-brightness-max': 1.2
  }
});

Разница между минимальной и максимальной яркостью формирует эффект усиления или ослабления изображения, аналогичный управлению интенсивностью визуального сигнала.


Динамическая модуляция интенсивности

Интенсивность может изменяться в зависимости от внешних факторов: времени суток, масштаба, пользовательских данных или состояния источника.

Пример зависимости от времени суток:

'heatmap-intensity': [
  'interpolate',
  ['linear'],
  ['get', 'hour'],
  0, 0.3,
  12, 1.5,
  24, 0.5
]

Такое управление используется для моделирования естественных изменений активности данных.


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

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

При этом следует учитывать:

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

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


Интенсивность как художественный инструмент

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

В одном и том же наборе данных изменение интенсивности способно:

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

Такой подход позволяет формировать разные смысловые интерпретации одной и той же географической информации без изменения источника данных.