Mapbox GL JS использует декларативную модель описания источников данных, в которой источник определяет способ получения и интерпретации пространственных данных до их визуализации слоями. Конфигурация источников задаётся в объекте стиля и представляет собой независимый слой абстракции между данными и рендерингом. Каждый источник описывается через набор параметров, определяющих тип данных, способ их загрузки, диапазоны масштабирования, географические ограничения и дополнительные поведенческие свойства.
Источник задаётся в разделе sources объекта стиля:
{
"version": 8,
"sources": {
"my-source": {
type: "geojson",
data: "https://example.com/data.geojson"
}
}
}
Ключ верхнего уровня (my-source) используется слоями для
привязки данных через source: "my-source". Внутри объекта
источника ключевым параметром всегда выступает type,
определяющий стратегию загрузки и обработки данных.
Несмотря на различие типов источников, существует набор общих параметров, применимых ко многим из них.
Определяет тип источника. Поддерживаются:
geojsonvectorrasterraster-demimagevideoТип определяет допустимые остальные параметры и формат данных.
Ограничивает область действия источника географическим прямоугольником:
bounds: [-180, -85.0511, 180, 85.0511]
Формат: [west, south, east, north].
Используется для оптимизации отрисовки и исключения загрузки тайлов вне области интереса.
Определяют диапазон масштабов, при которых источник активен:
minzoom: 0,
maxzoom: 14
minzoom ограничивает минимальный масштаб отображения,
maxzoom — максимальный. За пределами диапазона источник
считается недоступным для рендеринга.
Строка атрибуции источника данных:
attribution: "© OpenStreetMap contributors"
Отображается в элементах управления картой и используется для соблюдения лицензий.
Векторные источники используют тайлы формата Mapbox Vector Tile.
{
type: "vector",
url: "mapbox://mapbox.mapbox-streets-v8"
}
Указывает на tileset или стиль Mapbox:
mapbox://... — ссылка на Mapbox tilesetАльтернатива url, определяющая шаблоны тайлов:
tiles: [
"https://example.com/tiles/{z}/{x}/{y}.pbf"
]
Используется при подключении кастомных серверов тайлов.
Определяет схему нумерации тайлов:
xyz — стандартная схема (по умолчанию)tms — перевёрнутая схемаscheme: "xyz"
Позволяет использовать свойства объекта как уникальный идентификатор:
promoteId: "id"
или для отдельных слоёв:
promoteId: {
buildings: "building_id"
}
Используется для корректной дифференциации объектов при обновлениях данных.
GeoJSON источник представляет данные в формате GeoJSON и может работать как с локальными объектами, так и с удалёнными ресурсами.
{
type: "geojson",
data: "https://example.com/data.geojson"
}
Определяет источник GeoJSON:
Пример inline:
data: {
type: "FeatureCollection",
features: []
}
Включает кластеризацию точечных объектов:
cluster: true
При включении точки группируются в кластеры в зависимости от масштаба.
Радиус кластеризации в пикселях:
clusterRadius: 50
Чем больше значение, тем более агрессивно происходит группировка.
Максимальный zoom, до которого выполняется кластеризация:
clusterMaxZoom: 12
После этого уровня кластеры распадаются на отдельные точки.
Позволяет агрегировать свойства объектов внутри кластера:
clusterProperties: {
sum: ["+", ["get", "value"]]
}
Используется для вычисления статистики по кластерам.
Параметр упрощения геометрии (Douglas-Peucker):
tolerance: 0.375
Уменьшает количество вершин для оптимизации производительности.
Растровые источники используют готовые изображения тайлов.
{
type: "raster",
tiles: [
"https://example.com/tiles/{z}/{x}/{y}.png"
],
tileSize: 256
}
Шаблоны URL растровых тайлов. Поддерживаются {z},
{x}, {y}.
Размер тайла в пикселях:
tileSize: 256
Также используется для корректного масштабирования при рендеринге.
Используется для отображения высот и рельефа.
{
type: "raster-dem",
url: "mapbox://mapbox.terrain-rgb",
encoding: "mapbox"
}
Формат кодирования высот:
mapbox — Mapbox Terrain RGBterrarium — альтернативный форматencoding: "mapbox"
Используется для наложения одного изображения на карту с привязкой к координатам.
{
type: "image",
url: "https://example.com/image.png",
coordinates: [
[-80, 45],
[-70, 45],
[-70, 40],
[-80, 40]
]
}
Ссылка на изображение.
Массив из четырёх координат, задающих углы изображения в порядке:
Используется для отображения видео поверх карты.
{
type: "video",
urls: [
"https://example.com/video.mp4"
],
coordinates: [
[-122.51596391201019, 37.56238816766053],
[-122.51467645168304, 37.56410183312965],
[-122.51309394836426, 37.563391708549425],
[-122.51423120498657, 37.56161849366671]
]
}
Список видеофайлов. Поддерживаются несколько источников для fallback.
Геопривязка видеоповерхности аналогична image source.
Источники в Mapbox GL JS могут обновляться динамически через API:
setData для GeoJSONsetTiles косвенно через перезагрузку стиляremoveSource и
addSourceGeoJSON источник поддерживает живое обновление без перезагрузки стиля:
map.getSource("my-source").setData(newData);
Конфигурация источников влияет на производительность рендеринга:
bounds приводит к лишним запросам
тайловtileSize увеличивает память GPUБаланс между точностью данных и производительностью достигается настройкой:
minzoom / maxzoomtoleranceclusterRadiusИсточник сам по себе не визуализируется. Он становится активным только при привязке к слою:
{
id: "points-layer",
type: "circle",
source: "my-source"
}
Разные типы слоёв по-разному интерпретируют один и тот же источник, используя его данные как входной поток для отрисовки геометрии, растровых текстур или видео-поверхностей.