Векторные стили в Mapbox GL JS используют слой типа
symbol, в котором текстовые подписи формируются через набор
layout-параметров. Среди них ключевую роль в визуальной унификации
подписей играют свойства text-transform и
text-letter-spacing, отвечающие за преобразование регистра
и управление межбуквенным интервалом.
Свойство text-transform определяет способ преобразования
символов перед рендерингом. Оно применяется к результату вычисления
text-field, независимо от исходных данных в источнике.
none — текст отображается без измененийuppercase — все символы приводятся к верхнему
региструlowercase — все символы приводятся к нижнему
региструТрансформация выполняется на этапе подготовки текста к отрисовке в стиле. Это означает, что:
При использовании выражений в text-field трансформация
применяется к финальной строке после вычисления выражения.
map.addLayer({
id: 'cities-labels',
type: 'symbol',
source: 'cities',
layout: {
'text-field': ['get', 'name'],
'text-transform': 'uppercase'
}
});
В этом случае все значения свойства name будут
отображаться заглавными буквами, независимо от того, как они записаны в
источнике данных.
При работе с многоязычными данными text-transform может
приводить к нежелательным эффектам:
uppercaseВ Mapbox GL JS преобразование выполняется на уровне текстового
представления, а не через замену символов в исходных данных, однако
результат зависит от возможностей выбранного шрифта
(text-font).
text-transform может применяться совместно с
layout-выражениями:
'text-field': [
'concat',
['get', 'name_en'],
' / ',
['get', 'name_local']
],
'text-transform': 'uppercase'
В таком случае преобразуется уже объединённая строка.
Свойство text-letter-spacing задаёт расстояние между
символами текста. Значение измеряется в единицах em, где 1
em соответствует размеру шрифта.
0Межбуквенный интервал применяется после формирования текстовой строки и зависит от:
text-size)Увеличение значения приводит к разрежению текста, уменьшение — к уплотнению.
map.addLayer({
id: 'road-labels',
type: 'symbol',
source: 'roads',
layout: {
'text-field': ['get', 'name'],
'text-letter-spacing': 0.2,
'text-size': 14
}
});
Значение 0.2 создаёт заметное расширение расстояния
между символами, что может использоваться для повышения читаемости на
загруженных участках карты.
Отрицательный text-letter-spacing используется для
компактного размещения текста:
'text-letter-spacing': -0.05
Такой подход применяется в ситуациях, где:
Сильные отрицательные значения могут привести к наложению символов и ухудшению читаемости.
text-letter-spacing поддерживает интерполяцию по
зуму:
'text-letter-spacing': [
'interpolate',
['linear'],
['zoom'],
5, 0.05,
10, 0.15,
15, 0.3
]
Такой подход позволяет:
Само по себе изменение межбуквенного интервала не является тяжёлой операцией, однако косвенно влияет на:
text-max-width)В слоях с высокой плотностью символов увеличение
text-letter-spacing может снижать вероятность коллизий,
поскольку увеличивает занимаемую ширину текста.
Комбинация этих свойств часто применяется для формирования строгих типографических систем в картографических стилях.
layout: {
'text-field': ['get', 'admin_name'],
'text-transform': 'uppercase',
'text-letter-spacing': 0.1,
'text-size': 12
}
Такое сочетание даёт:
В условиях высокой плотности объектов:
uppercase увеличивает визуальную «массу» текстаletter-spacing снижает слипание
символовletter-spacing повышает компактность, но
увеличивает риск наложенийБаланс этих параметров напрямую влияет на эффективность label placement алгоритма Mapbox GL JS.
Поведение обоих свойств зависит от:
Некоторые шрифты могут некорректно отображать трансформированный текст, особенно при использовании нелатинских алфавитов.
При использовании ограничения ширины:
text-letter-spacing может ускорять перенос
строкuppercase изменяет длину строки, влияя на
разбиениеЭто особенно заметно при динамическом изменении зума.
Алгоритм размещения подписей учитывает итоговую геометрию текста. Поэтому:
letter-spacing увеличивает bounding boxuppercase может изменять ширину строки (особенно в
языках с разной формой символов)Это влияет на приоритет размещения и вероятность скрытия подписей.
'text-transform': 'uppercase',
'text-letter-spacing': 0.05
Используется для нейтральных картографических стилей с высокой читаемостью.
'text-transform': 'none',
'text-letter-spacing': -0.02
Подходит для перегруженных слоёв, где критична экономия пространства.
'text-transform': 'uppercase',
'text-letter-spacing': 0.25
Применяется для выразительных тематических слоёв и титульных подписей.
При изменении zoom Mapbox GL JS пересчитывает:
text-letter-spacing масштабируется вместе с
text-size, поскольку обе величины выражаются в
относительных единицах.