В Mapbox GL JS слой типа symbol используется для
отображения точечных данных, подписей и иконок. В отличие от
геометрических слоёв (fill, line,
circle), символы встраиваются в общий конвейер рендеринга,
где критическую роль играет порядок их отрисовки.
Поведение рендеринга символов определяется двумя ключевыми механизмами:
Оба параметра управляют тем, в каком порядке элементы слоя визуализируются, но делают это на разных уровнях абстракции: один работает с группировкой по геометрии, второй — с индивидуальными объектами.
Параметр symbol-z-order определяет стратегию
упорядочивания символов внутри слоя. Он влияет на то, как Mapbox
группирует и сортирует символы до применения индивидуальных правил
сортировки.
Поддерживаются два основных режима:
В этом режиме порядок символов зависит от их положения на экране по оси Y.
Поведение особенно заметно при наклоне карты (pitch > 0), где визуальная иерархия становится более выраженной.
В этом режиме порядок определяется исходными данными.
Этот режим часто используется при необходимости строгого контроля порядка отображения независимо от геометрии.
Параметр symbol-z-order влияет только на глобальный
порядок группировки, но не позволяет управлять отдельными объектами
внутри группы с высокой точностью. При сложных наборах данных этого
недостаточно, особенно при работе с подписями и перекрывающимися
иконками.
Для детального управления используется
symbol-sort-key.
symbol-sort-key задаётся на уровне каждого feature и
определяет приоритет отображения внутри одного слоя
symbol.
Принцип работы:
symbol-sort-key, тем выше приоритет
отрисовки;symbol-z-order.higher symbol-sort-key → rendered on top
lower symbol-sort-key → rendered below
map.addLayer({
id: 'cities',
type: 'symbol',
source: 'points',
layout: {
'text-field': ['get', 'name'],
'symbol-sort-key': ['get', 'priority']
}
});
В этом случае каждый объект должен содержать поле
priority:
{
"type": "Feature",
"properties": {
"name": "Almaty",
"priority": 10
},
"geometry": {
"type": "Point",
"coordinates": [76.8897, 43.2389]
}
}
Объекты с большим значением priority будут визуально
перекрывать остальные.
Оба параметра работают совместно, но на разных уровнях:
symbol-z-order определяет базовую стратегию группировки:
viewport-y)source)symbol-sort-key определяет точный порядок внутри группы
Итоговый порядок отрисовки можно представить как двухступенчатую модель:
1. группировка (symbol-z-order)
2. сортировка внутри группы (symbol-sort-key)
При использовании viewport-y возникают характерные
эффекты:
Это поведение обусловлено попыткой имитации глубины сцены, где нижние элементы воспринимаются ближе к наблюдателю.
Режим source устраняет пространственную зависимость и
обеспечивает:
Однако отсутствие пространственной логики делает его менее подходящим для картографических сцен с высокой плотностью объектов.
symbol-sort-key поддерживает expression API Mapbox GL
JS, что позволяет вычислять приоритет динамически:
'symbol-sort-key': [
'case',
['==', ['get', 'type'], 'capital'], 100,
['==', ['get', 'type'], 'city'], 50,
1
]
Такой подход позволяет:
При работе с text-field и icon-image
порядок отрисовки влияет на:
Особенно важно учитывать:
text-allow-overlap,
text-ignore-placement);symbol-sort-key применяется до стадии collision
detection.Mapbox GL JS использует этап разрешения столкновений, где часть символов может быть скрыта.
Порядок влияния следующий:
symbol-z-ordersymbol-sort-keyСледствие: объект с высоким symbol-sort-key всё равно
может быть скрыт, если нарушает правила столкновений.
При проектировании картографических стилей важно учитывать:
viewport-y подходит для сцен с визуальной
глубиной;source подходит для строгой детерминированности;symbol-sort-key необходим для бизнес-логики
приоритетов;При изменении параметров камеры (pitch,
bearing, zoom) происходит перерасчёт
порядка:
viewport-y перестройка выполняется постоянно;source порядок остаётся неизменным;symbol-sort-key пересчитывается при изменении свойств
данных или выражений.Это напрямую влияет на стабильность визуального восприятия при интерактивной навигации по карте.
При использовании векторных тайлов:
source зависит от порядка тайлов и их
внутреннего содержимого;symbol-sort-key применяется локально внутри каждого
тайла;Это создаёт эффект частичной локальности сортировки при масштабировании карты.
symbol-sort-key глобальной сортировкой
данных на сервере;viewport-y в плотных городских слоях без
контроля коллизий;Эти ошибки приводят к непредсказуемому наложению подписей и ухудшению читаемости карты.