В системе рендеринга символов в Mapbox GL JS ключевую роль играет
механизм collision detection — алгоритм, отвечающий за предотвращение
наложения иконок и текстовых подписей друг на друга. Параметр
icon-allow-overlap является одним из
центральных инструментов управления этим поведением в слое типа
symbol.
Он определяет, может ли иконка отображаться поверх других символов, игнорируя стандартные правила избегания пересечений.
В symbol-слоях каждая иконка и текст рассматриваются как
отдельные «кандидаты» на размещение на карте. При рендеринге движок
выполняет следующие шаги:
Вычисление экранных координат символа
Определение bounding box (рамки занимаемой области)
Проверка пересечений с уже размещёнными элементами
Принятие решения:
По умолчанию система стремится минимизировать наложения, сохраняя читаемость карты.
Параметр:
layout: {
"icon-allow-overlap": true | false
}
false (по
умолчанию)icon-priority (если задан)Результат: более «чистая» карта, но возможна потеря части маркеров.
trueРезультат: максимальная плотность данных, но риск визуального шума.
"icon-ignore-placement": true
icon-allow-overlap тем, что влияет на
поведение других объектов относительно данной иконки"icon-optional": true
Иконка может быть скрыта, если не хватает места
В сочетании с icon-allow-overlap создаёт гибридное
поведение:
"text-allow-overlap": true
icon-allow-overlap для
полного отключения коллизий в слоеПри конфликте нескольких символов движок учитывает:
icon-priorityz-order)При icon-allow-overlap: true иконка:
map.addLayer({
id: "points",
type: "symbol",
source: "places",
layout: {
"icon-image": "marker-15",
"icon-size": 1,
"icon-allow-overlap": true
}
});
В этом случае все маркеры будут отображаться независимо от плотности данных.
Используется при отображении:
Задача: показать максимум информации, даже ценой перегрузки.
При замене heatmap на символы:
В системах с большим количеством объектов:
пересечения допустимы и часто ожидаемы.
При разработке:
Хотя icon-allow-overlap не напрямую увеличивает
вычислительную сложность коллизий (так как проверка отключается для
конкретных символов), он влияет на:
В плотных слоях может наблюдаться:
Символы с включённым overlap:
Это может приводить к эффекту:
icon-allow-overlap не заменяет фильтрацию:
filter: ["==", ["get", "type"], "restaurant"]
Фильтр определяет что рисовать, а overlap — как рисовать.
Также он не влияет на:
При использовании setData:
В экосистеме символов Mapbox GL JS ключевые параметры часто работают в связке:
icon-allow-overlaptext-allow-overlapicon-ignore-placementtext-ignore-placementsymbol-placementicon-rotation-alignmenticon-paddingКаждое свойство влияет на отдельную часть логики размещения.
"icon-allow-overlap": true,
"text-allow-overlap": true
Результат:
Без учета minzoom и maxzoom overlap может
привести к:
При overlap важность объектов теряется, если не задана система приоритетов.
В Mapbox sprites иконки берутся из атласа изображений, и overlap не влияет на выбор изображения, но влияет на:
Внутри Mapbox GL JS pipeline:
icon-allow-overlap модифицирует шаг
4–5, фактически сокращая или отключая проверку
конфликтов для конкретных элементов.