В Mapbox GL JS вся работа с геоданными строится вокруг объекта источников (sources). Источник определяет, откуда библиотека получает данные для отображения на карте, и в каком формате эти данные будут интерпретироваться. Локальные источники данных представляют собой данные, загружаемые напрямую в браузер или передаваемые в виде объектов JavaScript без обращения к удалённым серверам тайлов.
Ключевая особенность локальных источников заключается в том, что они не зависят от инфраструктуры тайлового сервера и позволяют динамически управлять геоданными на клиентской стороне.
Наиболее распространённый формат локальных данных — GeoJSON. Он позволяет описывать геометрию объектов и их свойства в структурированном JSON.
Подключение GeoJSON-источника выполняется через метод
addSource:
map.on('load', () => {
map.addSource('points-source', {
type: 'geojson',
data: {
type: 'FeatureCollection',
features: [
{
type: 'Feature',
geometry: {
type: 'Point',
coordinates: [69.2401, 41.2995]
},
properties: {
title: 'Объект 1'
}
}
]
}
});
});
GeoJSON-источник может быть как статическим объектом, так и динамически изменяемым набором данных. Это делает его основным инструментом для работы с пользовательскими слоями, интерактивными элементами и временными данными.
Одним из ключевых механизмов является возможность обновления данных
без пересоздания источника. Для этого используется метод
setData.
map.getSource('points-source').setData({
type: 'FeatureCollection',
features: [
{
type: 'Feature',
geometry: {
type: 'Point',
coordinates: [69.2500, 41.3100]
},
properties: {
title: 'Обновлённый объект'
}
}
]
});
Обновление через setData приводит к мгновенной
перерисовке всех слоёв, зависящих от данного источника. Это позволяет
реализовывать:
Хотя векторные источники чаще используются через удалённые тайлы,
Mapbox GL JS поддерживает работу с локальными векторными данными через
спецификацию vector. Такие источники требуют заранее
подготовленных тайлов в формате Mapbox Vector Tile (MVT), которые могут
храниться локально или раздаваться с собственного сервера.
map.addSource('local-vector', {
type: 'vector',
tiles: [
'http://localhost:8080/tiles/{z}/{x}/{y}.pbf'
]
});
Локальные векторные источники используются, когда требуется:
Растровые источники (raster) позволяют подключать набор
изображений в виде тайлов. В локальном контексте это могут быть:
map.addSource('local-raster', {
type: 'raster',
tiles: [
'./tiles/{z}/{x}/{y}.png'
],
tileSize: 256
});
Растровые источники не содержат семантики объектов, но обеспечивают визуальное представление данных.
Тип image применяется для привязки одного изображения к
географическим координатам. Это локальный источник, который не
использует тайловую систему.
map.addSource('overlay-image', {
type: 'image',
url: './overlay.png',
coordinates: [
[69.20, 41.35],
[69.30, 41.35],
[69.30, 41.25],
[69.20, 41.25]
]
});
Такой подход используется для:
Mapbox GL JS поддерживает источник типа video,
позволяющий накладывать видеопоток на карту с географической
привязкой.
map.addSource('video-source', {
type: 'video',
urls: [
'./video.mp4'
],
coordinates: [
[69.20, 41.35],
[69.30, 41.35],
[69.30, 41.25],
[69.20, 41.25]
]
});
Этот тип источника применяется в задачах:
Локальные источники отличаются высокой гибкостью, но требуют контроля со стороны разработчика:
При работе с большими GeoJSON-структурами важно учитывать:
setDataGeoJSON остаётся самым гибким, но не всегда самым быстрым форматом. При увеличении количества объектов возрастает нагрузка на:
Для оптимизации используются:
cluster: true)Пример включения кластеризации:
map.addSource('cluster-source', {
type: 'geojson',
data: '/data/points.geojson',
cluster: true,
clusterMaxZoom: 14,
clusterRadius: 50
});
Локальные источники часто применяются в интерактивных приложениях:
Типичная схема работы включает:
layer)setDataИсточник данных не отображается напрямую. Он всегда используется
через слой (layer), который определяет визуализацию:
circle для точекline для линийfill для полигоновsymbol для текстов и иконокПример связывания:
map.addLayer({
id: 'points-layer',
type: 'circle',
source: 'points-source',
paint: {
'circle-radius': 6,
'circle-color': '#ff0000'
}
});
Каждый источник в Mapbox GL JS изолирован по имени. Это позволяет:
Такая архитектура обеспечивает модульность картографических приложений и упрощает управление состоянием визуализации.