Векторные источники являются основой большинства интерактивных карт в MapLibre GL JS. Они представляют геоданные в виде геометрий (точек, линий, полигонов), которые загружаются в виде тайлов и рендерятся на стороне клиента с использованием WebGL. Такой подход обеспечивает высокую производительность и гибкость стилизации.
Векторный источник подключается через тип vector и
обычно ссылается на TileJSON или URL шаблон тайлов:
map.addSource('streets', {
type: 'vector',
tiles: [
'https://example.com/tiles/{z}/{x}/{y}.pbf'
],
minzoom: 0,
maxzoom: 14
});
Ключевое свойство tiles задаёт шаблон адресов для
загрузки PBF-файлов. Альтернативой может выступать url,
указывающий на TileJSON-документ:
map.addSource('streets', {
type: 'vector',
url: 'https://example.com/tiles.json'
});
Векторные источники поддерживают несколько важных параметров оптимизации:
minzoom и maxzoom — ограничивают диапазон
отображения источникаbounds — географические границы данныхscheme — схема нумерации тайлов (xyz или
tms)promoteId — выбор поля как уникального идентификатора
фичvolatile — принудительное обновление данных при каждом
кадре (редко используется)Главное преимущество векторных данных заключается в возможности динамической стилизации: один и тот же источник может быть отрисован множеством слоёв с разными визуальными правилами.
GeoJSON-источники предназначены для работы с объектами, загружаемыми и обрабатываемыми непосредственно в браузере. Они удобны для небольших и средних наборов данных, а также для динамически изменяемой информации.
map.addSource('points', {
type: 'geojson',
data: {
type: 'FeatureCollection',
features: [
{
type: 'Feature',
geometry: {
type: 'Point',
coordinates: [71.4304, 51.1281]
},
properties: {
title: 'Объект'
}
}
]
}
});
Источник geojson поддерживает загрузку данных как
напрямую, так и через URL:
map.addSource('points', {
type: 'geojson',
data: '/data/points.geojson'
});
Особенность GeoJSON источников — возможность динамического обновления данных:
const source = map.getSource('points');
source.setData(newGeojsonData);
Это делает их удобными для отображения изменяющихся наборов данных: трекинга объектов, пользовательских событий, результатов фильтрации.
Дополнительные возможности:
cluster: true)clusterRadius)clusterMaxZoom)generateId)Пример кластеризации:
map.addSource('earthquakes', {
type: 'geojson',
data: '/data/earthquakes.geojson',
cluster: true,
clusterRadius: 40
});
Растровые источники используются для отображения тайлов изображений, таких как спутниковые снимки, ортофотопланы или растровые карты.
map.addSource('satellite', {
type: 'raster',
tiles: [
'https://example.com/tiles/{z}/{x}/{y}.png'
],
tileSize: 256
});
Растровые данные не содержат геометрической структуры объектов — они представляют собой пиксельные изображения. Основная задача источника — обеспечить корректную подгрузку и тайлинг изображений.
Ключевые параметры:
tileSize — размер тайла (обычно 256 или 512)bounds — ограничение области отображенияminzoom / maxzoom — управление уровнем
детализацииРастровые источники часто используются как базовые слои карты, поверх которых накладываются векторные данные.
Raster DEM источники применяются для работы с данными высот, используемыми для построения 3D-рельефа.
map.addSource('terrain', {
type: 'raster-dem',
tiles: [
'https://example.com/dem/{z}/{x}/{y}.png'
],
tileSize: 512,
encoding: 'mapbox'
});
Параметр encoding определяет формат кодирования высотных
данных. Наиболее распространённый вариант — mapbox,
использующий закодированные значения RGB для представления высоты.
Raster DEM активно используется в сочетании с настройкой рельефа карты:
map.setTerrain({
source: 'terrain',
exaggeration: 1.5
});
Это позволяет формировать трёхмерные сцены с визуализацией гор, долин и других форм рельефа.
ImageSource позволяет наложить одиночное изображение на карту с привязкой к географическим координатам. Такой источник применяется для отображения схем, исторических карт, локальных визуализаций.
map.addSource('overlay', {
type: 'image',
url: '/images/overlay.png',
coordinates: [
[71.0, 51.2],
[71.5, 51.2],
[71.5, 50.8],
[71.0, 50.8]
]
});
Четыре координаты задают границы изображения по углам, позволяя точно позиционировать его на карте.
ImageSource поддерживает динамическое обновление:
const source = map.getSource('overlay');
source.updateImage({
url: '/images/new-overlay.png',
coordinates: [...]
});
VideoSource используется для наложения видеопотока на карту в пределах заданной географической области. Это может применяться для визуализации наблюдений, симуляций или временных данных.
map.addSource('video', {
type: 'video',
urls: [
'https://example.com/video.mp4'
],
coordinates: [
[71.0, 51.2],
[71.5, 51.2],
[71.5, 50.8],
[71.0, 50.8]
]
});
Видео синхронизируется с картой и отображается как геопривязанная текстура. Поддержка нескольких источников видео позволяет формировать составные визуализации.
CanvasSource позволяет использовать HTML5 <canvas>
как динамический источник данных. Он полезен для генерации визуализаций
в реальном времени: тепловых карт, симуляций, графиков.
map.addSource('dynamic', {
type: 'canvas',
canvas: 'myCanvasId',
animate: true,
coordinates: [
[71.0, 51.2],
[71.5, 51.2],
[71.5, 50.8],
[71.0, 50.8]
]
});
Параметр animate указывает, требуется ли перерисовка
источника на каждом кадре.
Canvas-источники интегрируются с внешней логикой отрисовки, что позволяет объединять карту с произвольными вычислительными моделями.
Все типы источников в MapLibre GL JS объединены единым жизненным циклом:
map.addSourcemap.getSourcemap.removeSourceУдаление источника автоматически приводит к удалению всех связанных слоёв:
map.removeSource('streets');
Обновление данных зависит от типа источника: GeoJSON поддерживает
setData, Image и Video — методы обновления содержимого,
векторные и растровые источники обновляются через изменение URL или
пересоздание тайлов.
Источники являются фундаментальным уровнем архитектуры MapLibre GL JS, определяя способ получения и обработки пространственных данных перед их визуализацией слоями.