В MapLibre GL JS растровые источники (raster sources)
представляют собой набор тайлов изображений, которые подгружаются по
координатной сетке в соответствии с текущим положением карты и уровнем
масштабирования. В отличие от векторных данных, где геометрия
интерпретируется на клиенте, растровые источники уже содержат готовое
изображение, что делает критически важным контроль области их
загрузки.
Параметр bounds в конфигурации источника задаёт
географический прямоугольник, внутри которого разрешена подгрузка
тайлов. Этот механизм влияет не на отображение уже загруженных данных, а
на сам процесс запроса тайлов у сервера.
В MapLibre GL JS параметр bounds задаётся в виде массива
из четырёх чисел:
bounds: [west, south, east, north]
где:
Все значения задаются в координатах WGS84 (EPSG:4326).
Пример конфигурации растрового источника:
map.addSource('satellite', {
type: 'raster',
tiles: [
'https://example.com/tiles/{z}/{x}/{y}.png'
],
tileSize: 256,
bounds: [-122.55, 37.68, -122.35, 37.83]
});
В данном случае загрузка тайлов будет ограничена прямоугольником, охватывающим часть территории Сан-Франциско.
При каждом изменении вида карты MapLibre выполняет пересчёт видимых
тайлов. Для растрового источника с заданным bounds
выполняется дополнительная проверка:
bounds.Важно, что bounds не обрезает уже загруженные
изображения. Он влияет только на запросы к серверу.
Растровые тайлы в MapLibre основаны на схеме XYZ. При отсутствии
ограничения bounds система предполагает, что слой
потенциально существует во всём мире, и запрашивает тайлы для любых
координат.
При задании bounds:
Однако важно учитывать, что система не изменяет глобальную проекцию
Web Mercator. Даже при ограниченном bounds карта остаётся
непрерывной в мировом масштабе.
Ограничение области часто используется вместе с параметрами
minzoom и maxzoom, которые управляют
диапазоном масштабов:
map.addSource('terrain', {
type: 'raster',
tiles: ['https://example.com/terrain/{z}/{x}/{y}.png'],
tileSize: 256,
bounds: [10.0, 45.0, 12.0, 46.5],
minzoom: 5,
maxzoom: 14
});
Связь параметров:
bounds ограничивает географическую областьminzoom и maxzoom ограничивают
детализациюПри сочетании этих параметров достигается более строгий контроль над источником данных: сервер получает запросы только в нужной зоне и на допустимых уровнях детализации.
Когда пользователь перемещает карту за пределы заданного прямоугольника:
MapLibre не ограничивает саму карту автоматически. Параметр
bounds источника не является ограничением камеры. Для
ограничения перемещения используется отдельная настройка:
map.setMaxBounds([
-122.6, 37.6,
-122.3, 37.9
]);
Таким образом, важно различать:
source bounds — ограничение данныхmap bounds — ограничение камерыWeb Mercator допускает горизонтальное повторение мира (wrap). При использовании растровых слоёв это может приводить к дублированию тайлов.
bounds частично решает эту проблему, предотвращая
загрузку тайлов вне заданной области, но не отключает глобальную систему
координат.
Если слой строго локальный, рекомендуется также учитывать:
wrapX (если используется кастомная
реализация)MapLibre интерпретирует bounds как прямоугольник в
географических координатах, но сопоставляет его с проекцией Web
Mercator.
Это означает:
При пересечении с тайлами используется проверка перекрытия, а не строгая геометрическая резка.
Растровые слои часто применяются для:
В таких случаях bounds является ключевым параметром, так
как:
Пример конфигурации для локального ортофото:
map.addSource('ortho', {
type: 'raster',
tiles: [
'https://tiles.server.com/ortho/{z}/{x}/{y}.jpg'
],
tileSize: 256,
bounds: [76.80, 43.10, 77.10, 43.30],
minzoom: 12,
maxzoom: 18
});
Источник с bounds может использоваться в любом
raster-layer:
map.addLayer({
id: 'ortho-layer',
type: 'raster',
source: 'ortho',
paint: {
'raster-opacity': 0.85,
'raster-fade-duration': 200
}
});
Важно, что слой не знает о bounds напрямую — он получает
уже отфильтрованные тайлы от источника.
1. Несоответствие тайловой схемы и bounds
Если сервер отдаёт тайлы за пределами указанного прямоугольника, MapLibre просто не будет их запрашивать, что может привести к “обрезанию” слоя.
2. Неправильный порядок координат
Частая ошибка:
bounds: [lat, lon, lat, lon]
Правильный порядок всегда:
[west, south, east, north]
3. Ожидание физического обрезания изображения
bounds не выполняет клиппинг изображений. Тайлы
полностью рендерятся, если они были запрошены, даже если частично
выходят за пределы.
4. Конфликт с maxBounds карты
При одновременном использовании:
source.boundsmap.setMaxBounds()может возникнуть ситуация, когда карта не может быть перемещена к зоне, где источник вообще доступен.
Правильная настройка bounds позволяет существенно
оптимизировать работу:
Дополнительно эффект усиливается при:
minzoom для исключения мелких
масштабовВо время плавных переходов (flyTo, easeTo)
MapLibre пересчитывает видимые тайлы. При приближении к границе
bounds может наблюдаться:
Это ожидаемое поведение, связанное с тем, что система не запрашивает данные вне заданного диапазона.
На стороне сервера bounds часто дублируется логикой:
В идеальной архитектуре:
bounds предотвращает лишние запросыbounds гарантирует отсутствие лишних тайлов в
ответеСовпадение этих границ критично для консистентности отображения слоя.
При использовании глобальных растровых источников bounds
обычно не задаётся. Однако в некоторых случаях его применяют для:
В таких сценариях важно учитывать, что вне bounds слой полностью перестаёт существовать на уровне запросов, а не только визуализации.