Внутри системы стилей Mapbox используется выраженийная модель, где строки обрабатываются через набор функций выражений. Эти функции применяются в слоях, фильтрах, свойствах layout и paint, обеспечивая динамическую генерацию текста, условную логику и преобразование данных без необходимости внешней обработки.
Строковые операции в выражениях не являются функциями JavaScript — они выполняются внутри движка стилей и имеют собственный синтаксис, строго типизированную модель и ограничения по контексту применения.
Строки в выражениях Mapbox GL JS рассматриваются как неизменяемые значения. Любая операция возвращает новый результат без модификации исходного значения.
Ключевые особенности:
Пример базового выражения:
"text-field": ["get", "name"]
Здесь значение берётся напрямую из свойства объекта данных.
Перед использованием строковых функций часто требуется явное приведение типов:
["to-string", ["get", "id"]]
Это необходимо, когда данные приходят в числовом или булевом виде, но используются в текстовых полях.
Типичные случаи:
Функция concat объединяет несколько строк в одну.
["concat", ["get", "city"], ", ", ["get", "country"]]
Результат формируется последовательно, без разделителей по умолчанию.
Особенности:
Пример формирования подписи:
"text-field": [
"concat",
["get", "name"],
" — ",
["get", "type"]
]
["upcase", ["get", "name"]]
Используется для:
["downcase", ["get", "ISO_CODE"]]
Применяется для:
Функция length возвращает количество символов:
["length", ["get", "name"]]
Используется для:
Пример условного окрашивания:
"circle-color": [
"case",
[">", ["length", ["get", "name"]], 10],
"#ff0000",
"#00ff00"
]
Функция slice позволяет извлекать часть строки.
["slice", ["get", "code"], 0, 3]
Параметры:
Применение:
Пример:
"text-field": [
"concat",
["slice", ["get", "postcode"], 0, 2],
"-"
]
Хотя полноценного indexOf как в JavaScript нет, логика
поиска реализуется через выражения match, in,
==.
Пример проверки значения:
["==", ["get", "type"], "restaurant"]
Пример условного сопоставления:
[
"match",
["get", "category"],
"park", "#00ff00",
"water", "#0000ff",
"#cccccc"
]
Более современный способ построения строк — выражение
format, позволяющее задавать стили для отдельных частей
текста.
"text-field": [
"format",
["get", "name"],
{},
"\n",
["get", "description"],
{ "font-scale": 0.8, "text-color": "#888" }
]
Возможности:
Это основной инструмент для сложных подписей на карте.
Строковые функции часто используются совместно:
"text-field": [
"concat",
["upcase", ["slice", ["get", "code"], 0, 2]],
" - ",
["downcase", ["get", "name"]]
]
Такие конструкции позволяют:
Строковые функции применяются не только в отображении, но и в фильтрации:
"filter": [
"==",
["downcase", ["get", "type"]],
"hospital"
]
Или более сложный вариант:
"filter": [
"in",
"city",
["downcase", ["get", "region"]]
]
Строковая система выражений имеет ряд ограничений:
["downcase", ["to-string", ["get", "status"]]]
Используется для унификации входящих данных перед сравнением.
[
"coalesce",
["get", "name"],
"Unknown"
]
Применяется для защиты от пустых значений.
[
"concat",
["slice", ["get", "name"], 0, 12],
"..."
]
to-string в concat.toUpperCase(),
.slice()) внутри выраженийnull в данныхsliceПри большом количестве объектов на карте важны:
Строковые функции активно применяются в:
text-field)case, match)Именно строковые операции формируют основу текстовой логики в стилях картографической визуализации, обеспечивая гибкую работу с атрибутивными данными без внешней обработки.