Mapbox GL JS строит визуализацию карты на основе множества сетевых запросов, которые выполняются динамически в процессе работы приложения. Основные типы загружаемых ресурсов:
style.json)vector tiles)raster tiles)Каждый из этих запросов формируется с набором параметров, которые определяют источник данных, область загрузки, формат ответа и правила доступа.
transformRequestКлючевой механизм управления сетевыми запросами — функция
transformRequest. Она перехватывает каждый URL перед
отправкой и позволяет модифицировать его или заголовки.
const map = new mapboxgl.Map({
container: 'map',
style: 'mapbox://styles/mapbox/streets-v12',
transformRequest: (url, resourceType) => {
return {
url: url,
headers: {
'X-Custom-Header': 'value'
}
};
}
});
Основные параметры объекта возврата:
url — конечный адрес запросаheaders — HTTP-заголовкиcredentials — политика передачи cookies
(same-origin, include, omit)method — HTTP-метод (в ограниченных сценариях)Механизм применяется ко всем типам ресурсов, включая тайлы и стили.
При подключении источников (sources) Mapbox GL JS
формирует URL, в который могут быть встроены query-параметры. Наиболее
типичный пример — векторные тайлы:
map.addSource('cities', {
type: 'vector',
tiles: [
'https://example.com/tiles/{z}/{x}/{y}.pbf?dataset=urban&year=2024'
],
minzoom: 0,
maxzoom: 14
});
Здесь query-параметры:
dataset=urban — выбор слоя данных на сервереyear=2024 — фильтрация данных на стороне источникаMapbox GL JS не интерпретирует параметры, а передаёт их напрямую серверу тайлов.
{z}/{x}/{y}Векторные тайлы используют шаблон:
/{z}/{x}/{y}.pbf
Допустимые расширения query:
?access_token=...
?version=...
?layer=...
?filter=...
Пример:
tiles: [
'https://api.example.com/vector/{z}/{x}/{y}.pbf?layer=roads&quality=high'
]
Сервер может интерпретировать параметры следующим образом:
layer — выбор конкретного слоя внутри тайлаquality — уровень детализацииformat — альтернативный формат кодированияMapbox GL JS автоматически добавляет токен доступа в большинство запросов к Mapbox API.
Пример:
https://api.mapbox.com/v4/mapbox.streets/0/0/0.vector.pbf?access_token=TOKEN
Основные параметры:
access_token — ключ доступаsku — идентификатор биллинга (внутренний параметр)client — идентификатор клиента SDKЭти параметры критичны для работы с Mapbox инфраструктурой и не должны удаляться при трансформации запросов.
style.json)Стиль карты также загружается через HTTP-запрос и может содержать вложенные параметры источников.
mapboxgl.Map({
style: 'mapbox://styles/mapbox/light-v11'
});
Фактический запрос:
https://api.mapbox.com/styles/v1/mapbox/light-v11?access_token=TOKEN
Дополнительные параметры:
fresh=true — игнорирование кэшаoptimize=true — оптимизация ответа сервераdebug=true — включение диагностических данныхШрифты загружаются как диапазоны символов:
https://api.mapbox.com/fonts/v1/{username}/{fontstack}/{range}.pbf
Пример:
https://api.mapbox.com/fonts/v1/mapbox/Arial Unicode MS,Regular/0-255.pbf
Параметры:
fontstack — список шрифтов через запятуюrange — диапазон Unicode символовhinting — параметры рендеринга (в некоторых CDN)Спрайты используются для иконок и UI элементов карты:
https://api.mapbox.com/styles/v1/{style_id}/sprite
Дополнительные форматы:
.json — метаданные.png — изображениеПример:
sprite.png?scale=2&attribution=true
Параметры:
scale — масштабирование (1x, 2x)attribution — включение атрибуции ресурсовtheme — выбор темы иконок (в кастомных
реализациях)GeoJSON может загружаться как удалённый ресурс:
map.addSource('points', {
type: 'geojson',
data: 'https://example.com/data/points.json?version=12'
});
или как inline-объект:
data: {
type: 'FeatureCollection',
features: []
}
Поддерживаемые параметры URL:
version — управление кэшированиемbbox — серверная фильтрация по границамlimit — ограничение количества объектовХотя это не HTTP query-параметры, фильтры Mapbox GL JS часто рассматриваются как логические параметры запроса данных.
map.addLayer({
id: 'cities-layer',
type: 'circle',
source: 'cities',
'source-layer': 'urban',
filter: ['>', ['get', 'population'], 100000]
});
Типы операторов:
>, <, ==,
!=all, any, nonein, !inget, hasФильтр формирует запрос к уже загруженному тайлу, уменьшая объём отображаемых данных.
Expressions в Mapbox GL JS можно рассматривать как декларативные параметры выборки.
Пример:
'circle-color': [
'interpolate',
['linear'],
['get', 'value'],
0, '#2DC4B2',
100, '#3BB3C3',
200, '#669EC4'
]
Здесь параметры:
getlinearExpressions выполняются на GPU и CPU в зависимости от типа слоя.
TileRequest)Каждый тайл может быть запрошен с набором внутренних параметров:
tileSize — размер тайла (512 или 256)minzoom / maxzoom — диапазон загрузкиreparseOverscaled — переразбор масштабированных
тайловbounds — ограничение географической областиПример:
map.addSource('buildings', {
type: 'vector',
url: 'mapbox://mapbox.3d-buildings',
minzoom: 14,
maxzoom: 16
});
Mapbox GL JS активно использует кэширование на уровне:
Параметры влияния:
cacheControl — управление HTTP-кэшемmaxTileCacheSize — размер локального кэшаrefreshExpiredTiles — перезагрузка устаревших
тайловИзменение URL query-параметров автоматически инвалидирует кэш:
tiles.pbf?version=1
tiles.pbf?version=2
При использовании кастомных источников через Source API
возможны дополнительные параметры:
class CustomSource {
loadTile(z, x, y, options) {
const url = `/tiles/${z}/${x}/${y}?debug=${options.debug}`;
}
}
Передаваемые параметры:
z, x, y — координаты
тайлаtileSizetransformoverzoomСетевое поведение Mapbox GL JS может настраиваться через:
maxParallelImageRequestsmaxParallelTileRequestsworkerCountЭти параметры косвенно влияют на формирование очереди запросов и их конкурентность.
const map = new mapboxgl.Map({
maxParallelTileRequests: 16,
maxParallelImageRequests: 8
});
Ограничение области загрузки влияет на формирование запросов тайлов:
map.setMaxBounds([
[71.0, 48.0],
[87.0, 55.0]
]);
Эти параметры не передаются в URL напрямую, но влияют на вычисление
набора {z}/{x}/{y} тайлов, которые будут запрошены.
map.addSource('overlay', {
type: 'image',
url: 'https://example.com/image.png',
coordinates: [...]
});
Поддерживаемые параметры:
url — источник изображенияcoordinates — геопривязка (4 угла)opacity — через слой, не запросtolerance — точность отрисовкиMapbox GL JS реализует повторные попытки запросов при ошибках сети:
maxRetries — количество повторовretryDelay — задержка между попыткамиtimeout — тайм-аут запросаЭти параметры влияют на поведение загрузки тайлов и стилей, особенно при нестабильном соединении.