В MapLibre GL JS все данные карты подгружаются динамически через сетевые запросы. Архитектура библиотеки построена вокруг потоковой загрузки тайлов, стилей, шрифтов и дополнительных ресурсов, поэтому контроль параметров HTTP-запросов является ключевым элементом интеграции с бэкендом, CDN и системами авторизации.
Каждый источник данных в стиле (sources) формирует
собственный набор сетевых обращений. Основные типы ресурсов:
sprite)glyphs)style.json)Пример источника:
{
"sources": {
"cities": {
"type": "vector",
"tiles": ["https://example.com/tiles/{z}/{x}/{y}.pbf"],
"minzoom": 0,
"maxzoom": 14
}
}
}
Каждый URL может содержать шаблонные параметры {z},
{x}, {y}, {bbox}. Они
подставляются MapLibre автоматически в момент формирования запроса.
Для векторных и растровых тайлов используются стандартные параметры:
{z} — уровень масштабирования{x} — координата тайла по оси X{y} — координата тайла по оси Y{quadkey} — альтернативный формат индексации
(редко)Пример:
https://tiles.server.com/{z}/{x}/{y}.mvt
Некоторые серверы поддерживают запрос через ограничивающий прямоугольник:
https://server.com/tiles?bbox={bbox}
Формат {bbox}:
minLon,minLat,maxLon,maxLat
MapLibre GL JS предоставляет механизм transformRequest,
позволяющий изменять каждый сетевой запрос до его отправки.
const map = new maplibregl.Map({
container: 'map',
style: 'style.json',
transformRequest: (url, resourceType) => {
return {
url: url,
headers: {
'Authorization': 'Bearer TOKEN'
}
};
}
});
Функция возвращает объект, который может содержать:
url — изменённый URLheaders — HTTP-заголовкиcredentials — режим передачи cookies
(same-origin, include, omit)method — HTTP метод (GET/POST, редко используется)body — тело запроса (для нестандартных API)Частая задача — передача токенов, ключей доступа и служебных заголовков.
transformRequest: (url) => {
return {
url,
headers: {
'X-API-Key': 'abcdef123456',
'X-Client': 'map-app'
}
};
}
Использование заголовков особенно важно при работе с:
При использовании GeoJSONSource параметры запроса могут
включать:
buffertoleranceclusterclusterRadiusclusterMaxZoomПример:
map.addSource('points', {
type: 'geojson',
data: 'https://example.com/data.geojson',
cluster: true,
clusterRadius: 40
});
При удалённой загрузке MapLibre выполняет простой HTTP GET без
дополнительной трансформации URL, если не задан
transformRequest.
Для vector tiles важны параметры:
minzoom — минимальный zoom загрузкиmaxzoom — максимальный zoomtileSize — размер тайла (обычно 512 или 256)bounds — географические ограничения загрузки"bounds": [-180, -85.0511, 180, 85.0511]
Эти параметры уменьшают количество запросов за пределами области интереса.
MapLibre использует внутренний кеш тайлов, но поведение можно косвенно контролировать через HTTP заголовки:
Cache-ControlETagIf-None-MatchПример серверной настройки:
Cache-Control: public, max-age=86400
При корректной настройке серверных заголовков повторные запросы к тайлам не выполняются, а используется кеш браузера или MapLibre.
Спрайты загружаются как два файла:
sprite.jsonsprite.pngMapLibre автоматически добавляет суффиксы:
sprite@2x.json
sprite@2x.png
Для Retina-экранов.
Шрифты запрашиваются по шаблону:
https://server/fonts/{fontstack}/{range}.pbf
Параметры:
{fontstack} — список шрифтов через запятую{range} — диапазон символов (например
0-255.pbf)Метод queryRenderedFeatures не выполняет HTTP-запросы,
но использует уже загруженные тайлы. Однако параметры фильтрации влияют
на выбор данных:
map.queryRenderedFeatures({
layers: ['cities'],
filter: ['==', 'type', 'capital']
});
Поддерживаемые параметры:
layers — список слоёвfilter — выражение фильтраgeometry — ограничение по областиvalidate — включение проверки данныхmap.querySourceFeatures('cities', {
sourceLayer: 'urban_areas',
filter: ['>=', 'population', 1000000]
});
Параметры:
sourceLayer — имя слоя внутри векторного тайлаfilter — фильтрация featuresvalidate — проверка геометрииНекоторые серверы требуют дополнительные query-параметры:
https://tiles.server.com/{z}/{x}/{y}.pbf?token=abc123&lang=ru
MapLibre позволяет динамически добавлять их через
transformRequest:
transformRequest: (url) => {
const u = new URL(url);
u.searchParams.set('token', 'abc123');
return { url: u.toString() };
}
При формировании запроса действует следующая цепочка:
style.json{z}/{x}/{y}transformRequestПри ошибках HTTP:
Эффективная настройка включает:
minzoom и maxzoomboundstileSize при необходимостиtransformRequest: (url, type) => {
return {
url,
headers: {
'X-Tenant-ID': getTenantId()
}
};
};
transformRequest: (url) => {
const u = new URL(url);
u.searchParams.set('lang', 'ru');
return { url: u.toString() };
};
transformRequest: (url) => {
return {
url: url.replace('tiles.prod.com', 'tiles.dev.com')
};
};
Сетевые обращения MapLibre GL JS формируются как комбинация:
Эта модель позволяет строить масштабируемые картографические системы с тонкой настройкой поведения каждого запроса к данным.