TileGrid — ключевой механизм управления тем, как пространственные данные разбиваются на тайлы и как эти тайлы соотносятся с координатами карты. В основе большинства слоёв с тайловой структурой (XYZ, WMTS, WMTS-KVP, XYZ raster, vector tiles) лежит именно TileGrid, определяющий масштабирование, разрешения, границы и систему индексации.
TileGrid описывает дискретную пространственную сетку, в которой карта представляется набором квадратных (или в редких случаях прямоугольных) тайлов фиксированного размера, обычно 256×256 пикселей. Каждый уровень масштабирования соответствует собственной сетке с уникальным разрешением.
Каждая тайловая сетка в OpenLayers определяется набором параметров:
Ключевая идея заключается в том, что каждый zoom level соответствует фиксированному коэффициенту пересчёта между пикселями и координатами карты.
XYZ-схема является наиболее распространённой моделью тайлов. В ней:
На нулевом уровне (zoom = 0) вся карта представлена одним тайлом. При увеличении zoom каждый тайл делится на 4:
Математически это выражается через удвоение количества тайлов по каждой оси:
import TileGrid from 'ol/tilegrid/TileGrid';
import { getWidth } from 'ol/extent';
const extent = [-20037508.342789244, -20037508.342789244,
20037508.342789244, 20037508.342789244];
const tileGrid = new TileGrid({
extent: extent,
tileSize: 256,
resolutions: (function () {
const resolutions = [];
const maxResolution = getWidth(extent) / 256;
for (let i = 0; i < 20; i++) {
resolutions[i] = maxResolution / Math.pow(2, i);
}
return resolutions;
})()
});
В этом примере создаётся классическая Web Mercator сетка, совпадающая с большинством онлайн-картографических сервисов.
Массив resolutions определяет, сколько единиц координат приходится на один пиксель.
Формула:
Где:
Именно этот массив управляет визуальной логикой масштабирования слоя.
Origin определяет начальную точку отсчёта сетки. В большинстве случаев используется:
Это связано с тем, что большинство тайловых схем (XYZ, WMTS) используют ось Y, направленную вниз.
Кастомизация TileGrid используется в случаях:
const customExtent = [0, 0, 1000000, 1000000];
const customGrid = new TileGrid({
extent: customExtent,
origin: [0, 1000000],
tileSize: 512,
resolutions: [2000, 1000, 500, 250, 125]
});
Особенности:
В отличие от стандартной схемы 2ⁿ, кастомные сетки допускают произвольные коэффициенты:
resolutions: [1000, 750, 500, 300, 100]
Такая модель используется в кадастровых системах, инженерных ГИС и специализированных картографических сервисах.
WMTS (Web Map Tile Service) требует строгого соответствия между серверной матрицей и клиентской сеткой.
Каждый zoom level в WMTS связан с matrixId:
const matrixIds = ['0', '1', '2', '3', '4'];
const wmtsGrid = new TileGrid({
origin: [-20037508, 20037508],
resolutions: [156543.0339, 78271.5169, 39135.7584],
matrixIds: ['0', '1', '2'],
tileSize: 256
});
TileGrid всегда связан с конкретной проекцией:
Проекция определяет:
TileGrid, в свою очередь, накладывает дискретную структуру на это пространство.
TileGrid может ограничивать загрузку тайлов рамками:
extent: [10, 10, 500, 500]
Это приводит к:
Если координаты выходят за пределы extent:
Для глобальных карт используется:
wrapX: true
Это позволяет:
TileGrid в этом случае предполагает глобальный extent.
Ключевые аспекты оптимизации:
Слишком большой диапазон zoom увеличивает количество вычислений:
Векторные тайлы используют ту же модель сетки, но:
TileGrid обеспечивает согласованность геометрии и индексации.
Сложные карты могут использовать несколько сеток:
Каждый слой имеет собственный TileGrid, несовместимый по структуре с другими.
Изменение origin приводит к:
Пример:
origin: [minX, minY]
или
origin: [0, 0]
При работе с большими extent возникают:
Решение заключается в строгом согласовании:
TileGrid фактически объединяет:
Именно через TileGrid в OpenLayers реализуется универсальный механизм работы с тайловыми слоями любых форматов и уровней сложности.