Строковые операции в MapLibre GL JS реализуются через систему выражений (expressions), основанную на спецификации стилей Mapbox Style Specification. В отличие от классического JavaScript, обработка строк происходит декларативно внутри стиля карты и выполняется на стороне рендеринга, что обеспечивает предсказуемость и высокую производительность при работе с большими наборами геоданных.
Основное назначение строковых операций — формирование подписей объектов, динамическое создание текстовых меток, условное отображение текстов, а также преобразование атрибутов свойств объектов (feature properties) в человекочитаемый формат.
Строки в MapLibre GL JS не обрабатываются как обычные JavaScript-строки. Вместо этого используются выражения, которые описывают трансформации данных в декларативной форме.
Любое строковое значение в выражениях может быть:
"text"["get", "property"]concat,
upcase)Ключевая особенность — отсутствие побочных эффектов и строгая типизация внутри expression runtime.
Основной источник строковых данных — свойства геообъектов:
{
"type": "symbol",
"source": "cities",
"layout": {
"text-field": ["get", "name"]
}
}
Здесь name извлекается из properties
каждого feature. Если значение отсутствует, результатом будет пустая
строка или fallback-логика через coalesce.
Использование to-string обеспечивает приведение
типов:
"text-field": ["to-string", ["get", "population"]]
Это важно при работе с числовыми или смешанными типами данных.
Операция объединения строк выполняется через concat,
которая принимает произвольное количество аргументов.
"text-field": [
"concat",
["get", "city"],
", ",
["get", "country"]
]
Результат формируется без дополнительных операторов. Каждый аргумент автоматически приводится к строке.
Типичные сценарии:
Пример расширенного форматирования:
"text-field": [
"concat",
["get", "name"],
"\n",
["to-string", ["get", "population"]],
" жителей"
]
Использование управляющих символов, таких как \n,
позволяет создавать многострочные подписи.
MapLibre GL JS поддерживает функции изменения регистра строк:
upcase — перевод в верхний регистрdowncase — перевод в нижний регистрПример:
"text-field": ["upcase", ["get", "code"]]
Комбинирование с другими выражениями:
"text-field": [
"concat",
["upcase", ["get", "region"]],
" - ",
["get", "name"]
]
Эти операции часто используются для унификации отображения данных, поступающих из неоднородных источников.
Для работы с условиями применяется case, позволяющий
возвращать разные строковые значения в зависимости от условий.
"text-field": [
"case",
["==", ["get", "type"], "capital"],
"Столица",
["==", ["get", "type"], "city"],
"Город",
"Населённый пункт"
]
Такой подход заменяет традиционные условные конструкции и полностью выполняется внутри style engine.
Дополнительно используется match для сопоставления
строк:
"text-field": [
"match",
["get", "class"],
"primary", "Основная дорога",
"secondary", "Второстепенная дорога",
"Дорога"
]
match особенно эффективен при классификации объектов по
строковым категориям.
Строковые поля часто содержат пропуски. Для обработки используется
coalesce, возвращающий первое непустое значение:
"text-field": [
"coalesce",
["get", "name"],
["get", "alt_name"],
"Без названия"
]
Это предотвращает появление пустых подписей на карте.
Хотя числа не являются строками, они часто включаются в текстовые выражения.
"text-field": [
"concat",
["get", "name"],
" (",
["to-string", ["get", "rank"]],
")"
]
В сложных случаях используется предварительная обработка:
roundto-stringНа практике строковые операции используются для создания шаблонов меток.
"text-field": ["concat", ["get", "name"], " — ", ["get", "category"]]
"text-field": [
"concat",
["get", "name"],
"\n",
["get", "description"]
]
"text-field": [
"concat",
["get", "name"],
"\nПлощадь: ",
["to-string", ["get", "area"]],
" км²"
]
Строковые операции часто используются для построения мультиязычных карт.
Подход заключается в хранении нескольких языковых полей:
{
"name_en": "Almaty",
"name_ru": "Алматы"
}
Выбор значения:
"text-field": ["get", "name_ru"]
Или динамический выбор через условие:
"text-field": [
"case",
["==", ["get", "lang"], "en"],
["get", "name_en"],
["get", "name_ru"]
]
Строковые операции используются не только для отображения, но и для фильтрации данных.
"filter": ["==", ["get", "category"], "park"]
Частичные совпадения реализуются через match:
"filter": [
"match",
["get", "type"],
["forest", "park", "garden"],
true,
false
]
Сложные выражения часто объединяют несколько операций:
"text-field": [
"upcase",
[
"concat",
["get", "city"],
", ",
["coalesce", ["get", "country"], "UNKNOWN"]
]
]
Такие конструкции позволяют строить многоуровневую трансформацию данных без внешней логики.
Строковые выражения в MapLibre GL JS имеют ряд ограничений:
Эти ограничения компенсируются производительностью и возможностью выполнения на уровне рендеринга карты.
В прикладных сценариях строковые операции чаще всего применяются для:
Типичная архитектура стиля предполагает перенос всей логики форматирования строк в expression-слой, исключая необходимость постобработки данных перед передачей в карту.