В выражениях стилей Mapbox GL JS ключевую роль в построении динамической визуализации данных играют функции interpolate и step. Они позволяют преобразовывать числовые или категориальные значения в визуальные свойства слоёв: цвет, размер, прозрачность, ширину линий и другие параметры рендеринга.
Стилизация в Mapbox GL JS основана на декларативных выражениях. Значения свойств слоя могут зависеть от:
Interpolate и step относятся к типу zoom-and-property functions, формирующих зависимость между входным значением и визуальным результатом.
Интерполяция задаёт плавное изменение значения между контрольными точками. Это используется, когда требуется непрерывный переход визуального свойства без резких скачков.
Базовая структура:
[
"interpolate",
interpolation-type,
input,
stop1, output1,
stop2, output2,
...
]
Наиболее распространённый вариант — linear.
Пример изменения радиуса круга в зависимости от масштаба:
[
"interpolate",
["linear"],
["zoom"],
5, 2,
10, 10
]
Поведение:
Позволяет управлять кривизной перехода:
[
"interpolate",
["exponential", 1.5],
["zoom"],
5, 2,
10, 10
]
Параметр 1.5 определяет ускорение роста:
Используется для визуализаций, где важна нелинейная чувствительность, например плотность объектов.
Частое применение — создание градиентов:
[
"interpolate",
["linear"],
["get", "population"],
0, "#2DC4B2",
1000, "#3BB3C3",
5000, "#669EC4",
10000, "#8B88B6"
]
Результат — непрерывный переход цвета в зависимости от значения
свойства population.
Для цветовых пространств применяется rgb,
hcl или lab:
[
"interpolate",
["linear"],
["zoom"],
0, "hsl(200, 80%, 50%)",
10, "hsl(300, 80%, 50%)"
]
Использование HCL или LAB обеспечивает более естественные визуальные переходы, особенно при длинных градиентах.
Функция step создаёт дискретные интервалы, где значение изменяется скачкообразно при достижении порогов.
Структура:
[
"step",
input,
output0,
stop1, output1,
stop2, output2,
...
]
Изменение цвета в зависимости от зума:
[
"step",
["zoom"],
"#1a1a1a",
5, "#2c7fb8",
10, "#41b6c4"
]
Поведение:
step часто используется для тематических карт:
[
"step",
["get", "density"],
"#ffffcc",
10, "#a1dab4",
50, "#41b6c4",
100, "#225ea8"
]
Это создаёт чёткие категории:
[
"step",
["get", "mag"],
2,
3, 6,
5, 10
]
Сейсмические данные или события часто визуализируются таким способом, чтобы быстро различать классы.
| Характеристика | interpolate | step |
|---|---|---|
| Тип изменения | непрерывный | дискретный |
| Плавность | высокая | отсутствует |
| Читаемость категорий | ниже | выше |
| Использование в аналитике | визуализация трендов | классификация |
Обе функции вычисляются на GPU-уровне рендеринга, но различаются по когнитивной нагрузке:
[
"interpolate",
["linear"],
["zoom"],
0, 0.5,
10, 1
]
Применение:
[
"step",
["get", "score"],
"#ccc",
50, "#ffeda0",
80, "#feb24c",
95, "#f03b20"
]
Используется в рейтинговых и аналитических слоях.
В step важно соблюдать строгую возрастающую последовательность порогов. Нарушение порядка приводит к некорректному поведению рендеринга.
В interpolate слишком редкие stop-значения создают визуально «пустые» диапазоны, где изменение становится неочевидным.
Использование RGB для длинных градиентов часто приводит к визуально грязным переходам. HCL и LAB дают более равномерную визуальную динамику.
В сложных слоях часто комбинируются обе функции:
Пример логики:
В системе выражений Mapbox GL JS интерполяция и ступенчатые функции выступают базовыми строительными блоками для создания адаптивных карт, где визуальные свойства слоя становятся функцией данных и масштаба, формируя динамическое представление пространственной информации без необходимости императивного управления отрисовкой.