MapLibre GL JS опирается на спецификацию Tile JSON как на один из ключевых механизмов описания источников тайловых данных. Tile JSON выступает промежуточным уровнем между стилем карты и реальными тайлами, определяя, где и как клиент должен получать данные, какие диапазоны масштабов поддерживаются, какие метаданные доступны и каким образом интерпретировать структуру источника.
Tile JSON представляет собой JSON-документ, который описывает набор
тайлов и параметры их загрузки. В экосистеме MapLibre GL JS он
используется как конфигурационный слой для источников
vector, raster и raster-dem.
Ключевая задача Tile JSON — стандартизировать описание источника так, чтобы рендерер мог:
Типичный Tile JSON включает следующие поля:
tilejsonВерсия спецификации. Например:
"tilejson": "3.0.0"
Это позволяет клиенту понимать, как интерпретировать документ.
tilesОсновной массив URL-шаблонов тайлов:
"tiles": [
"https://example.com/tiles/{z}/{x}/{y}.pbf"
]
Поддерживаются переменные:
{z} — уровень масштаба;{x} — координата тайла по оси X;{y} — координата тайла по оси Y;{quadkey} — альтернативная система адресации.MapLibre GL JS использует эти шаблоны для динамического построения запросов при панорамировании и масштабировании карты.
vector_layersПрисутствует в векторных источниках и описывает слои внутри тайлов:
"vector_layers": [
{
"id": "roads",
"fields": {
"name": "String",
"type": "String"
}
}
]
Это поле не обязательно для работы, но важно для инспекции данных и инструментов отладки.
minzoom и
maxzoomОграничивают диапазон доступных уровней масштабирования:
"minzoom": 0,
"maxzoom": 14
При выходе за пределы этих значений клиент либо перестаёт запрашивать тайлы, либо использует кэшированные данные.
boundsГеографические границы источника:
"bounds": [-180, -85.0511, 180, 85.0511]
Формат: [west, south, east, north].
Используется для оптимизации запросов и предотвращения загрузки данных вне области покрытия.
centerРекомендуемая точка центра и масштаб:
"center": [37.6173, 55.7558, 10]
Используется как hint для начального позиционирования карты.
schemeОпределяет схему нумерации тайлов:
"scheme": "xyz"
Основные варианты:
xyz — стандартная схема (y увеличивается вниз);tms — обратная схема (y инвертирован).MapLibre GL JS автоматически учитывает это поле при расчёте координат тайлов.
Tile JSON может использоваться напрямую через параметр
tiles или косвенно через url, указывающий на
JSON-документ.
map.addSource('terrain', {
type: 'vector',
url: 'https://example.com/tiles/tiles.json'
});
В этом случае MapLibre GL JS выполняет запрос к Tile JSON, извлекает параметры и начинает загрузку тайлов.
map.addSource('terrain', {
type: 'vector',
tiles: [
'https://example.com/tiles/{z}/{x}/{y}.pbf'
],
minzoom: 0,
maxzoom: 14
});
Этот вариант фактически эквивалентен Tile JSON, но без отдельного HTTP-документа.
Для type: "vector" Tile JSON часто включает:
tilesminzoommaxzoomvector_layersФормат данных обычно Mapbox Vector Tile (MVT).
Пример:
{
"tilejson": "3.0.0",
"tiles": ["https://example.com/vectiles/{z}/{x}/{y}.pbf"],
"minzoom": 0,
"maxzoom": 14,
"vector_layers": [
{
"id": "buildings",
"fields": {
"height": "Number"
}
}
]
}
Для type: "raster" Tile JSON описывает
изображение-тайлы:
{
"tilejson": "3.0.0",
"tiles": ["https://example.com/raster/{z}/{x}/{y}.png"],
"minzoom": 0,
"maxzoom": 18
}
Здесь отсутствует vector_layers, так как данные уже
растеризованы.
Используется для высотных данных:
{
"tilejson": "3.0.0",
"tiles": ["https://example.com/dem/{z}/{x}/{y}.png"],
"encoding": "mapbox"
}
Дополнительное поле encoding определяет способ
кодирования высот.
При добавлении источника с url происходит следующий
процесс:
minzoom,
maxzoom, scheme.tiles.Особое значение имеет кэширование:
{z}/{x}/{y} + URL;Tile JSON поддерживает расширенные шаблоны:
"tiles": [
"https://a.tiles.example.com/{z}/{x}/{y}.pbf",
"https://b.tiles.example.com/{z}/{x}/{y}.pbf"
]
Используется балансировка нагрузки.
"tiles": [
"https://example.com/{z}/{x}/{y}.pbf?api_key=TOKEN"
]
Позволяет передавать токены доступа и параметры фильтрации.
MapLibre GL JS при работе с Tile JSON учитывает:
В этих случаях используется:
Tile JSON и тайлы должны корректно поддерживать CORS:
Access-Control-Allow-Origin обязателен для браузерного
использования;Tile JSON редко используется изолированно. Обычно он подключается через стиль:
{
"version": 8,
"sources": {
"my-vector": {
"type": "vector",
"url": "https://example.com/tiles.json"
}
},
"layers": [
{
"id": "roads",
"type": "line",
"source": "my-vector",
"source-layer": "roads"
}
]
}
Здесь Tile JSON определяет инфраструктуру данных, а стиль — их визуализацию.
Ключевые параметры, влияющие на производительность:
minzoom снижает количество лишних
запросов;bounds уменьшает область загрузки;tilejson;{z}/{x}/{y};xyz и серверной логики;bounds, приводящие к пустой
карте;maxzoom, создающий избыточные
запросы.Некоторые Tile JSON реализации добавляют:
attribution — текст атрибуции данных;description — описание слоя;format — явное указание формата (pbf,
png);legend — визуальная легенда.MapLibre GL JS игнорирует неизвестные поля, сохраняя обратную совместимость.