В Mapbox GL JS каждый слой карты представляет собой самостоятельную
сущность, которая должна быть однозначно идентифицируема внутри стиля.
Для этого используется параметр id. Он задаёт уникальное
строковое имя слоя и выполняет роль ключа, по которому система
обращается к конкретному слою в дереве рендеринга.
Основные свойства идентификатора:
idid
осуществляется добавление, удаление, вставка и обновление слояПри работе с большим количеством слоёв важно соблюдать строгую систему именования, иначе управление стилем становится затруднительным.
Пример добавления слоя с идентификатором:
map.addLayer({
id: 'roads-primary',
type: 'line',
source: 'openmaptiles'
});
Идентификатор используется также в методах управления порядком слоёв:
map.moveLayer('roads-primary', 'water-label');
map.removeLayer('roads-primary');
Таким образом, id является центральной точкой доступа к
любому визуальному элементу карты.
typeПараметр type определяет визуальную и логическую природу
слоя. Он задаёт способ интерпретации данных из источника и метод их
отрисовки. В Mapbox GL JS тип слоя напрямую влияет на допустимые
свойства и поведение рендеринга.
Основные типы слоёв:
fill — заливка полигоновline — линии (дороги, границы, маршруты)symbol — текстовые и иконографические меткиcircle — точечные объекты в виде круговfill-extrusion — 3D-экструзии зданийraster — растровые тайлыheatmap — тепловые картыhillshade — рельефbackground — фон стиляКаждый тип слоя определяет доступный набор paint- и layout-свойств.
Например, у circle есть параметры радиуса и цвета, а у
line — ширина и шаблон штриха.
Пример слоя типа circle:
map.addLayer({
id: 'earthquakes',
type: 'circle',
source: 'earthquakes-data',
paint: {
'circle-radius': 6,
'circle-color': '#ff0000'
}
});
Пример слоя типа fill:
map.addLayer({
id: 'countries-fill',
type: 'fill',
source: 'countries',
paint: {
'fill-color': '#0080ff',
'fill-opacity': 0.5
}
});
Выбор type определяет не только внешний вид, но и
семантику слоя, поэтому ошибка в типе приводит к некорректному
отображению или игнорированию свойств.
sourceПараметр source указывает источник данных, из которого
слой получает геометрические и атрибутивные данные. В Mapbox GL JS
источники объявляются отдельно от слоёв и могут переиспользоваться.
source связывает слой с объектом данных, который может
быть:
vector)raster)geojson)Источники регистрируются через addSource:
map.addSource('cities', {
type: 'geojson',
data: 'https://example.com/cities.geojson'
});
После этого слой может ссылаться на источник по его имени:
map.addLayer({
id: 'cities-points',
type: 'circle',
source: 'cities'
});
source1. Множественное использование Один источник может использоваться несколькими слоями одновременно:
map.addLayer({
id: 'cities-points',
type: 'circle',
source: 'cities'
});
map.addLayer({
id: 'cities-labels',
type: 'symbol',
source: 'cities'
});
Это позволяет разделять визуальные представления одной и той же геометрии.
2. Типизация источника
Тип источника должен соответствовать способу интерпретации данных. Например:
geojson — для динамических данных и локальных
объектовvector — для предзагруженных тайловых наборовraster — для изображений и тайловых слоёвПример векторного источника:
map.addSource('composite', {
type: 'vector',
url: 'mapbox://mapbox.mapbox-streets-v8'
});
3. Ограничения связи source и type слоя
Не каждый type слоя может работать с любым
source. Существует строгая совместимость:
fill, line, symbol,
circle → vector, geojsonraster → только rasterheatmap → geojsonfill-extrusion → vector,
geojsonНарушение этих правил приводит к тому, что слой не отображается или вызывает ошибки загрузки стиля.
id,
type и sourceЭти три параметра формируют базовую структуру любого слоя в Mapbox GL JS:
id отвечает за идентификацию и управлениеtype определяет способ визуализацииsource предоставляет данные для отрисовкиИх взаимодействие можно представить как три уровня:
id)type)source)Пример полной связки:
map.addSource('earthquakes', {
type: 'geojson',
data: '/data/earthquakes.geojson'
});
map.addLayer({
id: 'earthquake-circles',
type: 'circle',
source: 'earthquakes',
paint: {
'circle-radius': 8,
'circle-color': '#ff5722'
}
});
При работе с Mapbox GL JS критично соблюдать порядок:
sourcelayer, использующий этот
источникПопытка создать слой без существующего источника приводит к ошибке выполнения.
// корректный порядок
map.addSource('data', {...});
map.addLayer({
id: 'layer',
type: 'circle',
source: 'data'
});
Также важно учитывать порядок слоёв в стиле: слои рендерятся строго
сверху вниз в порядке их добавления, если не используется
beforeId.
id в связке со source и
typeКомбинация параметров позволяет выполнять точечные операции над визуализацией:
setDataПример обновления источника:
map.getSource('cities').setData(newData);
В этом случае type и id остаются
неизменными, меняется только содержимое source, что
обеспечивает стабильность визуальной структуры карты.