В Mapbox GL JS механизм отображения showCollisionBoxes
относится к отладочным возможностям рендеринга символов (текста и
иконок) и позволяет визуализировать прямоугольники коллизий, которые
используются движком для предотвращения наложения подписей, значков и
других символических элементов карты.
Эта функциональность напрямую связана с системой размещения слоёв
типа symbol, где каждая текстовая метка или иконка проходит
стадию расчёта доступного пространства и проверки пересечений с другими
объектами.
При отображении карты движок выполняет сложную задачу оптимального размещения подписей:
Каждый элемент получает так называемый collision box — ограничивающий прямоугольник, описывающий область, которую элемент занимает на экране с учётом:
text-paddingicon-paddingtext-offseticon-anchorCollision detection предотвращает:
Если два элемента пересекаются, один из них скрывается в зависимости от приоритетов слоя.
Параметр showCollisionBoxes включает визуализацию этих
внутренних прямоугольников.
Он используется исключительно в отладочных целях и позволяет:
text-allow-overlap и
icon-allow-overlapВ зависимости от версии API Mapbox GL JS активация может выглядеть следующим образом:
map.on('load', () => {
map.showCollisionBoxes = true;
});
В некоторых конфигурациях используется объектный доступ к debug-флагам:
const map = new mapboxgl.Map({
container: 'map',
style: 'mapbox://styles/mapbox/streets-v11'
});
map.showCollisionBoxes = true;
Дополнительно часто комбинируется с другими режимами визуальной отладки:
map.showTileBoundaries = true;
map.showPadding = true;
map.showCollisionBoxes = true;
После включения режима на карте появляются полупрозрачные прямоугольники, которые обозначают:
Каждый прямоугольник соответствует либо тексту, либо иконке, либо их комбинации.
Collision boxes формируются на основе свойств слоя:
Определяет содержимое текста, влияющее на размер bounding box.
Увеличивает или уменьшает область коллизии пропорционально размеру шрифта.
Добавляет дополнительный буфер вокруг текста:
"text-padding": 2
Работают аналогично тексту, но применяются к изображениям:
"icon-padding": 1.5
Если включены, collision boxes перестают блокировать отображение:
"text-allow-overlap": false,
"icon-allow-overlap": false
Система рендеринга выполняет несколько шагов:
Проекция геометрии
Расчёт anchor point
Формирование bounding box
Проверка пересечений
Принятие решения
Collision system учитывает приоритеты:
symbol-sort-keyПример:
"symbol-sort-key": 10
Элементы с более высоким значением получают преимущество при размещении.
Если подписи внезапно пропадают, включение collision boxes позволяет определить:
В городских районах часто возникает перегрузка:
Collision visualization показывает реальную картину, а не итоговый рендер.
При разработке стиля можно:
text-paddingtext-size по zoomsymbol-sort-keyCollision boxes динамически пересчитываются при:
На малом zoom уровне:
На большом zoom:
Слишком большие поля приводят к:
Ошибки в:
text-anchoricon-anchorмогут смещать collision box относительно реального текста.
Если несколько symbol layers имеют одинаковый приоритет:
Хотя showCollisionBoxes — отладочная функция, она
отражает внутреннюю сложность:
В базовых стилях:
В кастомных стилях:
Для полной диагностики часто включаются:
Совместный анализ позволяет понять: