AttributionControl представляет собой встроенный элемент интерфейса, отвечающий за отображение обязательных атрибуций источников картографических данных. В контексте Mapbox GL JS этот контрол обеспечивает соблюдение требований лицензирования тайлов, стилей и сторонних источников данных, используемых картой.
Основная функция заключается в визуальном отображении текстовой информации об источниках данных, например: поставщики карт, наборы данных, стили, а также сторонние слои. Контроль автоматически собирает атрибуции из всех активных слоёв и источников и формирует единый блок.
В стандартной конфигурации Mapbox GL JS контрол атрибуции:
mapbox и
пользовательских источников.Если карта использует данные Mapbox, атрибуция включается автоматически, так как это является обязательным требованием использования платформы.
AttributionControl добавляется либо через параметры инициализации карты, либо динамически через API.
import mapboxgl from "mapbox-gl";
mapboxgl.accessToken = "YOUR_ACCESS_TOKEN";
const map = new mapboxgl.Map({
container: "map",
style: "mapbox://styles/mapbox/streets-v12",
center: [69.2401, 53.2145],
zoom: 10
});
В этом случае контроль уже присутствует по умолчанию.
Контроль можно сконфигурировать через параметр
attributionControl:
const map = new mapboxgl.Map({
container: "map",
style: "mapbox://styles/mapbox/streets-v12",
attributionControl: true
});
Также можно добавить его вручную:
const map = new mapboxgl.Map({
container: "map",
style: "mapbox://styles/mapbox/streets-v12",
attributionControl: false
});
map.addControl(new mapboxgl.AttributionControl());
Контроль поддерживает набор опций, позволяющих изменять поведение и внешний вид.
const attribution = new mapboxgl.AttributionControl({
compact: true,
customAttribution: "Данные: OpenStreetMap contributors"
});
map.addControl(attribution);
true — отображение в виде компактной кнопки;false — развернутый список атрибуций.Компактный режим используется в интерфейсах с ограниченным пространством, особенно на мобильных устройствах.
Позволяет добавить пользовательскую строку атрибуции, которая будет отображаться вместе с системной.
customAttribution: "Satellite imagery © Example Provider"
AttributionControl объединяет несколько типов источников:
Каждый источник может добавлять собственную строку атрибуции через свойство:
map.addSource("custom-data", {
type: "geojson",
data: "data.geojson",
attribution: "Custom dataset © Company"
});
Все строки автоматически агрегируются контролом.
AttributionControl реагирует на изменения состояния карты:
setStyle);После каждого изменения происходит пересборка списка атрибуций без необходимости ручного обновления.
Контрол можно модифицировать программно:
const attributionControl = map
.getContainer()
.querySelector(".mapboxgl-ctrl-attrib");
Однако корректный способ взаимодействия — через методы карты:
map.addControl(new mapboxgl.AttributionControl(), "bottom-right");
map.removeControl(attributionControl);
Контроль поддерживает стандартные позиции интерфейса:
top-lefttop-rightbottom-leftbottom-rightПример:
map.addControl(
new mapboxgl.AttributionControl(),
"bottom-left"
);
AttributionControl оформляется через стандартные классы:
.mapboxgl-ctrl.mapboxgl-ctrl-attrib.mapboxgl-ctrl-attrib-innerПереопределение стилей:
.mapboxgl-ctrl-attrib {
font-size: 11px;
background: rgba(255, 255, 255, 0.8);
border-radius: 4px;
}
Компактный режим управляется классом:
.mapboxgl-compactВ мобильной версии AttributionControl автоматически переключается в компактный режим при ограниченной ширине экрана. Это предотвращает перекрытие карты и других UI элементов.
Особенности поведения:
AttributionControl может использоваться как основа для кастомных решений.
map.addControl(
new mapboxgl.AttributionControl({
customAttribution: [
"Terrain data © Provider A",
"Traffic data © Provider B"
]
})
);
При подключении сторонних API можно централизованно управлять атрибуциями:
map.addSource("external", {
type: "vector",
url: "mapbox://examples.8fgz4egr",
attribution: "External tiles © Data Partner"
});
AttributionControl обычно используется совместно с:
Он занимает минимальное пространство интерфейса и не конфликтует с другими элементами управления.
Если контроль отключён:
attributionControl: false
то ответственность за отображение атрибуций полностью переходит к разработчику. В этом случае необходимо вручную соблюдать требования лицензий всех используемых данных, включая слои Mapbox и сторонние источники.
attribution.customAttribution (передача
нестроковых значений).AttributionControl формирует итоговый список через объединение:
source.attribution);После объединения выполняется дедупликация строк и сортировка перед рендерингом интерфейса.