В архитектуре стиля MapLibre GL JS свойства слоя делятся на две фундаментальные категории: layout и paint.
Layout свойства определяют геометрию и размещение объектов на карте. Они отвечают за то, как именно элементы будут расположены, какие ресурсы будут выбраны для отображения и каким образом они будут интерпретированы до этапа отрисовки.
Paint свойства, напротив, управляют визуальным оформлением уже размещённых объектов: цветами, прозрачностью, обводками и эффектами.
Ключевая особенность layout-части заключается в том, что изменения этих свойств часто требуют пересчёта расположения объектов и могут приводить к перерасчёту части сцены (layout pass), что делает их более “тяжёлыми” по сравнению с paint.
Layout свойства формируют промежуточный слой между геометрическими данными источников (sources) и финальным изображением на экране.
Именно здесь выполняются:
Layout можно рассматривать как декларативное описание того, как данные должны быть разложены в экранном пространстве.
Наиболее богатый набор layout свойств присутствует в слое типа symbol, который объединяет текстовые и иконографические объекты.
Базовое свойство управления отображением слоя:
visible — слой отображаетсяnone — слой скрытПример:
layout: {
visibility: 'visible'
}
Хотя выглядит тривиально, это свойство участвует в оптимизации рендеринга: скрытые слои исключаются из большинства стадий обработки.
Один из ключевых layout параметров.
Определяет, какой спрайт из sprite atlas будет использован:
layout: {
'icon-image': 'airport-15'
}
Особенности:
Пример с условием:
'icon-image': [
'match',
['get', 'type'],
'airport', 'airport-15',
'train', 'rail-15',
'default-15'
]
Масштабирование иконки относительно базового размера спрайта:
'icon-size': 1.2
Также поддерживает интерполяции:
'icon-size': [
'interpolate',
['linear'],
['zoom'],
5, 0.5,
10, 1.5
]
Это позволяет динамически менять визуальную плотность карты при изменении масштаба.
Определяет точку привязки иконки относительно координаты:
centertopbottomleftrightПример:
'icon-anchor': 'bottom'
Используется для корректного позиционирования маркеров над точкой.
Смещение иконки относительно anchor:
'icon-offset': [0, -10]
Обычно применяется для тонкой корректировки положения иконок при плотной компоновке.
Эти параметры управляют системой предотвращения столкновений:
'icon-allow-overlap': false,
'icon-ignore-placement': false
allow-overlap — разрешает наложение иконок;ignore-placement — игнорирует ограничения
размещения.В сложных картах именно эти свойства определяют, какие объекты “выживают” при конфликте за место.
Одно из наиболее мощных layout свойств.
Определяет текстовую строку, которая будет отображаться:
'text-field': '{name}'
Поддерживает:
Пример:
'text-field': [
'concat',
['get', 'name'],
' (',
['get', 'type'],
')'
]
Задаёт семейство шрифтов:
'text-font': ['Open Sans Regular', 'Arial Unicode MS Regular']
Особенности:
Размер текста в пикселях:
'text-size': 14
Часто используется с zoom-интерполяцией:
'text-size': [
'interpolate',
['linear'],
['zoom'],
5, 10,
10, 18
]
Контроль точки привязки текста и его смещения:
'text-anchor': 'top',
'text-offset': [0, 0.5]
Используется для размещения подписей относительно геометрии.
Управляет выравниванием текста вдоль линии:
autoleftcenterrightОсобенно важно для линейных объектов (дороги, реки).
Ограничивает ширину текста перед переносом:
'text-max-width': 8
При превышении значения текст автоматически переносится.
Контроль типографики:
'text-letter-spacing': 0.05,
'text-line-height': 1.2
Используются для улучшения читаемости при разных масштабах.
Преобразование регистра:
noneuppercaselowercaseПример:
'text-transform': 'uppercase'
Аналогично иконкам, управляют коллизиями текста:
'text-allow-overlap': false,
'text-ignore-placement': false
В слоях типа line набор layout свойств более ограничен, но критически важен для визуального качества линий.
Определяет форму концов линии:
buttroundsquarelayout: {
'line-cap': 'round'
}
Определяет форму соединения сегментов:
miterroundbevel'line-join': 'round'
Контролируют поведение острых углов:
'line-miter-limit': 2,
'line-round-limit': 1.05
Эти параметры предотвращают артефакты при сложной геометрии линий.
В слоях fill и circle layout свойства минимальны.
Практически единственное layout свойство:
layout: {
visibility: 'visible'
}
Это связано с тем, что геометрия этих слоёв не требует сложной компоновки.
Layout свойства в MapLibre GL JS полностью поддерживают style expressions, что позволяет создавать динамические правила без JavaScript-логики.
Пример условного выбора иконки:
'icon-image': [
'case',
['==', ['get', 'priority'], 'high'],
'star-15',
'circle-15'
]
Пример адаптации текста к масштабу:
'text-size': [
'interpolate',
['linear'],
['zoom'],
0, 8,
12, 16,
18, 22
]
Expression layer позволяет переносить логику на уровень рендеринга, снижая необходимость внешних вычислений.
Layout стадия является одной из наиболее чувствительных к производительности частей системы.
Причины:
Особенно затратны:
text-field с выражениями;icon-image привязки.Практический эффект: изменение layout свойства может вызвать перерасчёт не только слоя, но и соседних слоёв в пределах tile.
При использовании text layout свойств происходит обращение к glyph atlas.
Механизм включает:
text-font напрямую влияет на то, какие glyph-ресурсы
будут запрошены.
Свойство icon-image работает поверх sprite atlas:
Оптимизация заключается в минимизации количества уникальных иконок для снижения нагрузки на GPU и память.
Система размещения символов использует глобальную модель коллизий:
Эта логика полностью относится к layout стадии, так как влияет на то, будет ли объект вообще передан в рендер.
Layout свойства поддерживают привязку к данным слоя:
'text-size': ['get', 'size']
Это позволяет: