MapLibre GL JS распространяется как npm-пакет и поддерживает интеграцию через современные сборщики модулей, а также подключение через CDN. Библиотека предназначена для рендеринга интерактивных карт с использованием WebGL и работает в браузерной среде.
Основной способ подключения в проектах с модульной системой:
npm install maplibre-gl
или при использовании yarn:
yarn add maplibre-gl
После установки библиотека становится доступной для импорта в JavaScript или TypeScript коде:
import maplibregl from 'maplibre-gl';
import 'maplibre-gl/dist/maplibre-gl.css';
Подключение CSS-файла является обязательным, поскольку он содержит базовые стили для контейнера карты, элементов управления и слоёв.
Для быстрых прототипов и статических страниц используется подключение через CDN:
<link href="https://unpkg.com/maplibre-gl@latest/dist/maplibre-gl.css" rel="stylesheet" />
<script src="https://unpkg.com/maplibre-gl@latest/dist/maplibre-gl.js"></script>
После подключения библиотека становится доступной через глобальный
объект maplibregl.
Перед созданием карты требуется HTML-элемент, который будет служить контейнером рендеринга WebGL:
<div id="map"></div>
Размер контейнера задаётся через CSS, так как без явных размеров карта не отобразится:
#map {
width: 100%;
height: 100vh;
}
Базовая инициализация включает создание экземпляра карты с указанием контейнера, стиля и начальных параметров отображения.
const map = new maplibregl.Map({
container: 'map',
style: 'https://demotiles.maplibre.org/style.json',
center: [37.6173, 55.7558],
zoom: 10
});
[долгота, широта]Дополнительно могут задаваться:
const map = new maplibregl.Map({
container: 'map',
style: 'https://demotiles.maplibre.org/style.json',
center: [37.6173, 55.7558],
zoom: 10,
pitch: 45,
bearing: -17.6,
antialias: true
});
MapLibre GL JS использует стили в формате JSON, соответствующие спецификации Mapbox Style Specification.
Пример минимального стиля:
{
"version": 8,
"sources": {
"osm": {
"type": "raster",
"tiles": [
"https://tile.openstreetmap.org/{z}/{x}/{y}.png"
],
"tileSize": 256
}
},
"layers": [
{
"id": "osm-layer",
"type": "raster",
"source": "osm"
}
]
}
Такой подход позволяет использовать любые тайловые серверы, включая OpenStreetMap, собственные tile-серверы или коммерческие провайдеры.
При использовании Vite установка остаётся стандартной, но требуется корректная работа с CSS:
import maplibregl from 'maplibre-gl';
import 'maplibre-gl/dist/maplibre-gl.css';
const map = new maplibregl.Map({
container: 'map',
style: 'https://demotiles.maplibre.org/style.json'
});
Vite автоматически обрабатывает зависимости и стили без дополнительной конфигурации.
При Webpack может потребоваться настройка загрузчиков CSS:
module.exports = {
module: {
rules: [
{
test: /\.css$/,
use: ['style-loader', 'css-loader']
}
]
}
};
После этого подключение идентично:
import 'maplibre-gl/dist/maplibre-gl.css';
import maplibregl from 'maplibre-gl';
MapLibre GL JS содержит типизацию, что позволяет использовать строгую проверку типов:
import maplibregl from 'maplibre-gl';
const map: maplibregl.Map = new maplibregl.Map({
container: 'map',
style: 'https://demotiles.maplibre.org/style.json'
});
В отличие от некоторых картографических SDK, MapLibre GL JS не требует обязательного API-токена. Однако источники данных могут иметь собственные требования авторизации.
Пример использования защищённого тайлового сервера:
const map = new maplibregl.Map({
container: 'map',
style: {
version: 8,
sources: {
tileset: {
type: 'vector',
tiles: [
'https://example.com/tiles/{z}/{x}/{y}.pbf?key=API_KEY'
]
}
},
layers: [
{
id: 'tileset-layer',
type: 'fill',
source: 'tileset'
}
]
}
});
Для управления моментом полной инициализации используется событие
load:
map.on('load', () => {
map.addSource('points', {
type: 'geojson',
data: {
type: 'FeatureCollection',
features: []
}
});
});
Событие гарантирует, что все стили и ресурсы загружены и готовы к модификации.
Типовая структура проекта включает:
project/
index.html
main.js
styles.css
package.json
main.js:
import maplibregl from 'maplibre-gl';
import 'maplibre-gl/dist/maplibre-gl.css';
const map = new maplibregl.Map({
container: 'map',
style: 'https://demotiles.maplibre.org/style.json',
center: [0, 0],
zoom: 2
});
map.addControl(new maplibregl.NavigationControl());
index.html:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>MapLibre</title>
<link rel="stylesheet" href="styles.css" />
</head>
<body>
<div id="map"></div>
<script type="module" src="./main.js"></script>
</body>
</html>
Библиотека включает набор встроенных контролов:
map.addControl(new maplibregl.NavigationControl());
map.addControl(new maplibregl.ScaleControl());
map.addControl(new maplibregl.FullscreenControl());
Контролы добавляются после создания экземпляра карты и могут быть размещены в разных углах интерфейса.
load приводит
к исключениям[lng, lat] и
[lat, lng] приводит к смещению центра карты