Векторные тайлы представляют собой компактный бинарный формат хранения геопространственных данных, оптимизированный для динамического рендеринга на стороне клиента. В отличие от растровых тайлов, которые содержат готовое изображение, векторные тайлы передают геометрию, атрибуты и структуру данных, позволяя клиентскому движку самостоятельно формировать визуализацию.
Наиболее распространённым стандартом является Mapbox Vector Tile (MVT), основанный на Protocol Buffers (Protobuf). MapLibre GL JS полностью поддерживает этот формат и использует его как основной способ доставки геоданных.
Формат MVT использует сериализацию Protobuf, что обеспечивает:
Каждый тайл представляет собой отдельный бинарный пакет, содержащий:
Векторные тайлы используют локальную координатную систему, независимую от глобальной географической системы координат.
Основные характеристики:
Такая система позволяет хранить геометрию с высокой точностью без привязки к конкретной проекции до этапа рендеринга.
Каждый векторный тайл содержит набор логических слоёв. Слой — это группировка объектов одного типа или тематической категории (например, дороги, здания, водоёмы).
Структура слоя включает:
Ключевая особенность: словари ключей и значений хранятся централизованно на уровне слоя, что снижает дублирование данных.
Векторные тайлы поддерживают три базовых типа геометрий:
Геометрия кодируется через последовательность команд:
Все координаты кодируются как дельты (delta encoding), что уменьшает размер данных за счёт хранения разниц между точками, а не абсолютных значений.
Дополнительно используется varint encoding, позволяющий эффективно упаковывать целые числа переменной длины.
Каждый геометрический объект может содержать набор атрибутов (properties), например:
Атрибуты хранятся в виде ссылок на ключи и значения слоя, а не как повторяющиеся строки, что снижает объём данных.
Векторные тайлы обычно генерируются в проекции Web Mercator (EPSG:3857), которая обеспечивает:
На этапе рендеринга MapLibre GL JS преобразует локальные координаты тайла в экранные координаты с учётом текущего масштаба и центра карты.
Векторные тайлы организованы в пирамиду уровней зума:
Формат URL обычно выглядит так:
/tiles/{z}/{x}/{y}.pbf
На каждом уровне зума:
В MapLibre GL JS векторные тайлы проходят несколько этапов обработки:
Загрузка тайлов
Парсинг Protobuf
Тесселяция
Буферизация
Отрисовка
Векторные тайлы:
Растровые тайлы:
Для уменьшения размера векторных тайлов применяются:
Дополнительно генераторы тайлов, такие как Tippecanoe, используют пороговые фильтры и агрессивную генерализацию для оптимизации производительности.
Несмотря на эффективность, формат имеет ограничения:
Векторные тайлы напрямую связаны со стилями:
source-layer определяет слой внутри тайла;paint управляет визуальными параметрами;layout задаёт поведение отображения.Пример логики связывания:
roads → стиль линии дорог;buildings → заливка и экструзия;water → заливка водных объектов.MapLibre GL JS динамически комбинирует данные тайлов и стиль, формируя итоговую сцену на GPU.
Стандартный extent (размер внутренней координатной сетки) чаще всего равен 4096, но может варьироваться (например, 256 или 8192).
Высокий extent:
Низкий extent:
Баланс выбирается в зависимости от характера данных и требований к производительности.