Mapbox GL JS работает как клиент, который динамически формирует множество HTTP-запросов к различным сервисам и ресурсам. Каждый тип источника данных (tiles, styles, sprites, glyphs, GeoJSON) использует собственный набор параметров, определяющих содержимое ответа и поведение сервера.
Основная особенность архитектуры — разделение запросов на несколько категорий:
Каждый из этих запросов имеет собственный набор параметров, но все они подчиняются общей модели HTTP-формирования URL и конфигурации через API Mapbox GL JS.
Стиль карты представляет собой JSON-документ, который загружается первым и определяет всю структуру визуализации.
Типичный запрос:
https://api.mapbox.com/styles/v1/{username}/{style_id}?access_token=...
access_token
fresh
optimize
Тайлы являются основным источником геоданных (vector tiles, raster tiles).
Шаблон URL:
https://api.mapbox.com/v4/{tileset_id}/{z}/{x}/{y}.vector.pbf?access_token=...
z / x / y
limit
geometry
определяет, какие геометрии возвращать:
buffer
layer
При использовании источника типа GeoJSON данные могут загружаться как локально, так и через HTTP.
source: {
type: "geojson",
data: "https://example.com/data.geojson"
}
data
setData()cluster
включает кластеризацию точек
серверные и клиентские параметры:
buffer
tolerance
Шрифты загружаются по шаблону:
https://api.mapbox.com/fonts/v1/{username}/{fontstack}/{range}.pbf
fontstack
range
0-255, 256-511Sprites используются для иконок и UI-элементов карты:
https://api.mapbox.com/styles/v1/{style_id}/sprite.png
https://api.mapbox.com/styles/v1/{style_id}/sprite@2x.json
@2x
format
Ключевой механизм кастомизации HTTP-запросов в Mapbox GL JS — функция
transformRequest.
Она позволяет изменять каждый исходящий запрос:
transformRequest: (url, resourceType) => {
return {
url: url,
headers: {
'X-Custom-Header': 'value'
},
credentials: 'include'
};
}
Добавление query-параметров
Изменение заголовков
Переопределение URL
Эти методы не формируют HTTP-запрос напрямую, но работают с уже загруженными данными.
Используется для выборки объектов на экране:
map.queryRenderedFeatures(point, {
layers: ['cities']
});
layers
filter
geometry
Работает с исходными тайлами:
map.querySourceFeatures('my-source', {
sourceLayer: 'buildings'
});
sourceLayer
filter
Фильтры являются частью query-логики и применяются к данным после загрузки.
Пример:
["==", ["get", "type"], "park"]
==!=><inallanyФильтрация применяется к уже загруженным тайлам, но влияет на то, какие данные используются в рендере и интерактивных запросах.
Mapbox предоставляет REST API, где параметры запросов играют ключевую роль.
access_token
sku
session_token
language
geometry
Mapbox GL JS активно использует кеширование, и параметры запросов могут влиять на него:
Vector tiles используют бинарный формат PBF и поддерживают дополнительные параметры:
layers
extent
simplify
При обновлении данных через runtime API:
map.getSource('points').setData(newData);
Используемые параметры:
type
cluster options
promoteId
При работе через transformRequest часто реализуются:
CORS handling
token rotation
signed URLs
В Mapbox GL JS существуют косвенные параметры, влияющие на количество и частоту запросов:
maxZoom / minZoom
tileSize
reparse geometry
promoteId
При обработке событий карты:
map.on('click', (e) => {
map.queryRenderedFeatures(e.point);
});
Используются параметры:
point
bbox
layers
Стиль Mapbox GL JS — это композиция множества URL-параметров:
Каждый URL может включать:
template parameters
{z}, {x}, {y}{bbox-epsg-3857}{access_token}В защищённых конфигурациях используются:
signature
expires
policy
Эти параметры часто генерируются серверной частью и передаются в Mapbox GL JS как часть URL.