TileJSON представляет собой стандартизированный формат описания наборов тайлов (tilesets), используемый в веб-картографии для унифицированного доступа к растровым и векторным тайлам. Он служит промежуточным слоем между источником пространственных данных и клиентскими библиотеками, включая Mapbox GL JS, обеспечивая согласованное описание структуры, диапазонов масштабов и URL-шаблонов для загрузки тайлов.
TileJSON решает задачу абстрагирования источника тайлов от способа их потребления. Вместо жестко заданных URL или локальных путей клиент получает метаданные, описывающие:
Такой подход делает возможным динамическую подмену источников данных без изменения клиентского кода, что критично для библиотек визуализации, таких как Mapbox GL JS.
TileJSON описывается JSON-объектом верхнего уровня, содержащим фиксированный набор полей. Несмотря на гибкость JSON, спецификация предполагает строгую семантику ключей.
tilejsonВерсия спецификации TileJSON.
Пример:
"tilejson": "3.0.0"
Используется для определения совместимости клиента и источника данных.
nameЧеловекочитаемое имя набора тайлов.
descriptionОписание слоя, его содержания и назначения.
tilesКлючевой элемент спецификации — массив URL-шаблонов:
"tiles": [
"https://example.com/tiles/{z}/{x}/{y}.pbf"
]
Поддерживаются подстановочные параметры:
{z} — уровень масштаба{x} — координата по оси X{y} — координата по оси YДля повышения производительности допускается несколько URL, которые используются как пул серверов (load balancing на уровне клиента).
vector_layersИспользуется для векторных тайлов (MVT — Mapbox Vector Tile). Описывает логическую структуру слоев внутри тайла:
"vector_layers": [
{
"id": "roads",
"fields": {
"name": "String",
"type": "String"
}
}
]
Этот блок не обязателен, но существенно упрощает интерпретацию данных на клиенте, особенно при стилизации в Mapbox GL JS.
boundsГеографический bounding box набора тайлов:
"bounds": [-180, -85.0511, 180, 85.0511]
Формат:
[west, south, east, north]
Используется для ограничения видимой области и оптимизации загрузки данных.
centerОпределяет начальный центр карты и уровень масштаба:
"center": [-73.9857, 40.7484, 12]
Формат:
[longitude, latitude, zoom]
minzoom и
maxzoomОграничивают диапазон доступных масштабов:
"minzoom": 0,
"maxzoom": 14
Эти параметры важны для корректного планирования запросов к серверу тайлов и предотвращения обращения к несуществующим уровням детализации.
attributionПоле, содержащее текст обязательного указания источника данных:
"attribution": "© OpenStreetMap contributors"
В контексте веб-картографии атрибуция является не только юридическим требованием, но и частью пользовательского интерфейса, который динамически отображается в клиентах визуализации, включая Mapbox GL JS.
schemeОпределяет систему координат тайлов:
"xyz" — стандартная веб-схема (Y растет вниз)"tms" — Tile Map Service (Y растет вверх)Пример:
"scheme": "xyz"
Большинство современных картографических стеков используют
xyz как дефолтное значение.
TileJSON не ограничивает тип данных, но чаще всего используются:
Векторные тайлы являются основой динамической стилизации в Mapbox GL JS, поскольку позволяют применять стили на стороне клиента без перерисовки изображений.
minresolution и расширения спецификацииНекоторые реализации добавляют нестандартные поля:
format — явное указание типа тайлов (pbf,
png, jpg)legend — описание легенды слояtemplate — HTML-шаблон описания объектовgrids — устаревший механизм UTFGridХотя эти расширения не входят в базовую спецификацию, они часто поддерживаются экосистемами, связанными с Mapbox.
TileJSON часто используется как источник данных для стилей. В Mapbox
Style Specification источник данных описывается через
sources, где TileJSON может выступать промежуточным
уровнем:
"sources": {
"streets": {
"type": "vector",
"url": "https://example.com/tiles.json"
}
}
В этом случае клиент сначала загружает TileJSON, затем извлекает
tiles, minzoom, maxzoom и другие
параметры.
Внутри Mapbox GL JS TileJSON используется на этапе инициализации источников данных. Библиотека:
VectorSource или
RasterSourcetiles для генерации запросовminzoom/maxzoom для оптимизации запросовbounds для клиппинга и ограничения
видимостиТакой подход позволяет отделить описание данных от их визуализации.
TileJSON напрямую влияет на стратегию кеширования:
tiles URL позволяют эффективно
использовать HTTP cachetiles[] повышает
параллелизмminzoom/maxzoom уменьшают количество
ненужных запросовВекторные тайлы особенно эффективны в связке с клиентской стилизацией, поскольку уменьшают общий объем передаваемых данных по сравнению с растровыми изображениями.
Ошибки в {z}/{x}/{y} приводят к 404 и отсутствию тайлов
на карте.
Если bounds не соответствует фактическим данным, карта
может:
Слишком узкий диапазон minzoom/maxzoom приводит к
отсутствию данных при масштабировании.
Может нарушать лицензионные требования источника данных.
TileJSON часто генерируется динамически сервером, который агрегирует данные из:
Сервер формирует JSON-описание на основе метаданных слоя и публикует его как конечную точку API.
В крупных системах TileJSON становится контрактом между:
Его простота позволяет использовать его как универсальный слой описания геоданных независимо от внутренней реализации источника.