Самостоятельный хостинг тайлов в экосистеме веб-картографии опирается на разделение трёх ключевых уровней: геоданные, тайловый сервер, клиентская визуализация. В контексте MapLibre GL JS именно второй уровень — доставка тайлов — определяет гибкость, производительность и независимость от внешних провайдеров.
Основой служат два формата:
Raster tiles (растровые тайлы) Представляют собой готовые изображения (PNG, JPEG), заранее отрендеренные сервером. Клиент лишь отображает их без дополнительной обработки.
Vector tiles (векторные тайлы) Содержат геометрические примитивы и атрибуты объектов (дороги, здания, полигоны), обычно в формате MVT (Mapbox Vector Tile). Рендеринг происходит на стороне клиента через WebGL.
В современных архитектурах приоритет отдается векторным тайлам, поскольку они:
Чаще всего используются:
Данные проходят этапы:
Самостоятельный хостинг невозможен без сервера, который преобразует данные в тайлы или раздает уже готовые:
MapLibre GL JS использует шаблон:
https://example.com/tiles/{z}/{x}/{y}.pbf
где:
При векторной подаче формат обычно .pbf (Protocolbuffer
Binary Format).
Конфигурация источника данных выполняется через style
JSON.
map.addSource('custom-tiles', {
type: 'vector',
tiles: [
'https://tiles.example.com/data/{z}/{x}/{y}.pbf'
],
minzoom: 0,
maxzoom: 14
});
map.addLayer({
id: 'roads',
type: 'line',
source: 'custom-tiles',
'source-layer': 'transportation',
paint: {
'line-color': '#ffcc00',
'line-width': 2
}
});
Ключевой параметр source-layer соответствует внутреннему
слою внутри векторного тайла.
В отличие от готовых платформ, самостоятельный хостинг требует полного контроля над style specification:
sources);layers);glyphs);sprites).Пример структуры:
{
"version": 8,
"sources": {
"base": {
"type": "vector",
"tiles": ["https://tiles.example.com/{z}/{x}/{y}.pbf"]
}
},
"layers": []
}
MapLibre GL JS требует заранее подготовленных шрифтов в формате PBF:
https://example.com/fonts/{fontstack}/{range}.pbf
Они обеспечивают рендеринг подписей и текстов на карте.
Спрайты представляют набор иконок в виде:
Пример:
https://example.com/sprites/sprite
При самостоятельном хостинге критически важно уменьшить нагрузку на сервер.
location /tiles/ {
expires 30d;
add_header Cache-Control "public";
}
При глобальной нагрузке тайлы распределяются через CDN:
Типичная цепочка выглядит следующим образом:
Используется для динамической генерации:
SEL ECT ST_AsMVT(q, 'layer', 4096, 'geom')
FR OM ...
Формат SQLite-базы, содержащей тайлы:
MapLibre GL JS поддерживает работу без интернета при условии локального хранения:
Ограничения:
Версионирование тайлов критично при обновлениях:
/tiles/v2/{z}/{x}/{y}.pbf);При публичном хостинге тайлов применяются:
Для уменьшения размера тайлов применяются:
Типовой production-стек:
Такая схема позволяет обслуживать высоконагруженные картографические приложения без зависимости от внешних API.