MapLibre GL JS поддерживает систему выражений стиля, в которой
ключевую роль играет interpolate — механизм плавного
изменения значений в зависимости от входной переменной. Чаще всего этой
переменной выступает масштаб карты (zoom), но допустимы и свойства
данных.
Выражение имеет следующий общий вид:
[
"interpolate",
interpolationType,
input,
stopInput1, output1,
stopInput2, output2,
...
]
Компоненты:
interpolationType — тип интерполяцииinput — входная величина (например,
["zoom"] или ["get", "property"])stopInput / output — контрольные точкиНа основе этих точек вычисляется промежуточное значение.
Наиболее распространённый сценарий — изменение визуальных параметров в зависимости от масштаба карты.
[
"interpolate",
["linear"],
["zoom"],
5, 1,
10, 4,
15, 10
]
Логика:
["linear"]
Линейная интерполяция изменяет значение с постоянной скоростью между точками.
[
"interpolate",
["linear"],
["zoom"],
0, 0,
10, 1
]
Здесь слой постепенно появляется по мере приближения карты.
["exponential", base]
Экспоненциальная интерполяция позволяет управлять кривизной изменения.
base = 1 → поведение аналогично linearbase > 1 → медленный старт и резкое ускорениеbase < 1 → быстрый старт и замедление[
"interpolate",
["exponential", 1.5],
["zoom"],
5, 2,
12, 20
]
Значение растёт неравномерно, создавая более естественное визуальное восприятие масштаба.
["cubic-bezier", x1, y1, x2, y2]
Кубическая кривая Безье позволяет точно управлять динамикой изменения значений.
[
"interpolate",
["cubic-bezier", 0.2, 0.8, 0.2, 1],
["zoom"],
3, 0,
10, 1
]
Такой вариант создаёт плавное появление с акцентом на мягкое замедление в конце.
interpolate часто используется для цветовых шкал,
например при визуализации данных.
[
"interpolate",
["linear"],
["get", "temperature"],
0, "#2c7bb6",
10, "#abd9e9",
20, "#ffffbf",
30, "#fdae61",
40, "#d7191c"
]
temperature преобразуется в
цветВходом может быть не только zoom, но и любое числовое поле источника данных.
[
"interpolate",
["linear"],
["get", "population_density"],
0, 2,
500, 6,
2000, 20
]
Такой подход позволяет строить адаптивную визуализацию геоданных.
Интерполяция особенно часто применяется в circle-radius
и circle-opacity.
"circle-radius": [
"interpolate",
["linear"],
["zoom"],
4, 1,
10, 8,
16, 20
]
"circle-opacity": [
"interpolate",
["linear"],
["zoom"],
6, 0,
8, 1
]
Чем больше точек задано, тем точнее можно контролировать поведение функции.
[
"interpolate",
["linear"],
["zoom"],
0, 0,
4, 0.2,
8, 0.6,
12, 0.9,
16, 1
]
Такая схема позволяет формировать нелинейные визуальные переходы даже при использовании linear-интерполяции.
Алгоритм интерполяции работает по принципу:
При выходе за пределы диапазона используется крайнее значение без дальнейшей экстраполяции.
interpolate может быть вложен в более сложные
конструкции.
[
"case",
[">", ["zoom"], 10],
[
"interpolate",
["linear"],
["zoom"],
10, 1,
15, 5
],
0
]
Здесь интерполяция активируется только при достижении определённого масштаба.
Использование интерполяции позволяет:
На уровне рендеринга это один из ключевых механизмов динамического стиля, обеспечивающий непрерывность отображения геометрии и данных.