AttributionControl в MapLibre GL JS отвечает за
отображение атрибуции — обязательных и дополнительных источников данных
карты, стилей и тайлов. Этот элемент интерфейса фиксируется на карте и
обеспечивает соблюдение лицензий провайдеров картографических данных,
таких как OpenStreetMap и других источников, используемых в стилях.
Контроль атрибуции является частью стандартных UI-компонентов MapLibre GL JS и тесно связан с системой управления элементами карты (controls system), где каждый контрол реализует единый интерфейс добавления, удаления и позиционирования на карте.
При создании экземпляра карты AttributionControl обычно
добавляется автоматически, если не отключён явно.
const map = new maplibregl.Map({
container: 'map',
style: 'https://demotiles.maplibre.org/style.json',
center: [0, 0],
zoom: 2,
attributionControl: true
});
При значении attributionControl: true создаётся
стандартный контрол, который:
Контрол можно создать явно и добавить в нужную позицию интерфейса.
const attribution = new maplibregl.AttributionControl();
map.addControl(attribution, 'bottom-right');
Позиционирование контролов в MapLibre GL JS поддерживает четыре стандартные области:
top-lefttop-rightbottom-leftbottom-rightAttributionControl принимает объект конфигурации,
позволяющий изменять поведение отображения.
Параметр compact управляет режимом отображения
атрибуции.
const attribution = new maplibregl.AttributionControl({
compact: true
});
true — компактный режим, атрибуция скрывается за
кнопкой;false — полное отображение списка источников.Компактный режим особенно полезен на мобильных устройствах и в интерфейсах с ограниченным пространством.
Позволяет задать дополнительные строки атрибуции, не связанные напрямую со стилем карты.
const attribution = new maplibregl.AttributionControl({
customAttribution: [
'Данные: OpenStreetMap',
'Геокодирование: собственный сервис'
]
});
Возможные формы значения:
Эти значения добавляются к автоматически собранным атрибуциям и отображаются совместно с ними.
MapLibre GL JS позволяет изменять атрибуцию после инициализации карты.
map.addControl(new maplibregl.AttributionControl({
compact: false
}));
map.removeControl(attribution);
Удаление полностью убирает UI-элемент и освобождает ресурсы, связанные с его отображением.
AttributionControl автоматически реагирует на изменения
стиля (setStyle). При каждом обновлении:
sources;attribution поля из источников;Пример смены стиля:
map.setStyle('https://demotiles.maplibre.org/style2.json');
Контрол автоматически синхронизирует отображаемые данные без дополнительного кода.
Атрибуции формируются из спецификации стиля MapLibre GL:
sources.*.attributionstyle.attributionПример:
{
"sources": {
"osm": {
"type": "vector",
"url": "https://example.com/tiles",
"attribution": "© OpenStreetMap contributors"
}
}
}
Эти значения автоматически попадают в
AttributionControl.
В некоторых интерфейсах стандартный контрол отключается, если требуется полностью кастомный UI.
const map = new maplibregl.Map({
container: 'map',
style: 'style.json',
attributionControl: false
});
В таком случае ответственность за отображение атрибуции переносится на разработчика.
При отключении стандартного UI можно использовать API карты для получения строки атрибуции:
const attributionText = map.getAttributionControl()._container?.innerText;
Однако более корректный подход — формировать список источников через стиль и хранить его отдельно от UI MapLibre.
DOM-структура AttributionControl позволяет изменять
внешний вид через CSS.
Основные классы:
.maplibregl-ctrl.maplibregl-ctrl-attrib.maplibregl-ctrl-attrib-buttonПример изменения внешнего вида:
.maplibregl-ctrl-attrib {
font-size: 11px;
color: #444;
background: rgba(255, 255, 255, 0.8);
border-radius: 4px;
padding: 4px 6px;
}
Компактная кнопка:
.maplibregl-ctrl-attrib-button {
width: 24px;
height: 24px;
}
В условиях ограниченного экрана compact: true становится
стандартной практикой. Контрол:
При формировании списка атрибуции учитывается:
customAttributionstyle.attributionsources.*.attributionДублирующиеся записи обычно фильтруются внутренним механизмом MapLibre GL JS.
AttributionControl может использоваться совместно с
другими контролами:
NavigationControlScaleControlПример компоновки:
map.addControl(new maplibregl.NavigationControl(), 'top-right');
map.addControl(new maplibregl.AttributionControl({ compact: true }), 'bottom-right');
map.addControl(new maplibregl.ScaleControl(), 'bottom-left');
Контрол не требует ручного обновления при изменении размера карты. Он:
resize;attribution в
стиле;Если в стиле отсутствуют источники с атрибуцией и не задан
customAttribution, контрол может: