README-файл является центральной точкой документации любого проекта на базе Mapbox GL JS. Именно он обеспечивает первое знакомство с библиотекой, демонстрирует базовые возможности, содержит инструкции по запуску и показывает минимальные рабочие примеры. Для проектов, использующих интерактивные карты, качество README напрямую влияет на скорость освоения API и эффективность внедрения решений.
Грамотно оформленный README обычно включает:
Наиболее распространённый пример демонстрирует создание карты с использованием стандартного стиля.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Mapbox GL JS Example</title>
<link
href="https://api.mapbox.com/mapbox-gl-js/v3.0.0/mapbox-gl.css"
rel="stylesheet"
/>
<style>
body {
margin: 0;
}
#map {
width: 100vw;
height: 100vh;
}
</style>
</head>
<body>
<div id="map"></div>
<script src="https://api.mapbox.com/mapbox-gl-js/v3.0.0/mapbox-gl.js"></script>
<script>
mapboxgl.accessToken = 'YOUR_ACCESS_TOKEN';
const map = new mapboxgl.Map({
container: 'map',
style: 'mapbox://styles/mapbox/streets-v12',
center: [37.6176, 55.7558],
zoom: 10
});
</script>
</body>
</html>
| Параметр | Назначение |
|---|---|
container |
DOM-элемент для отображения карты |
style |
Стиль визуализации карты |
center |
Координаты центра карты |
zoom |
Начальный масштаб |
При использовании современных сборщиков приложение обычно подключает Mapbox GL JS как зависимость.
npm install mapbox-gl
import mapboxgl from 'mapbox-gl';
mapboxgl.accessToken = process.env.MAPBOX_TOKEN;
const map = new mapboxgl.Map({
container: 'map',
style: 'mapbox://styles/mapbox/light-v11',
center: [30.3141, 59.9386],
zoom: 11
});
Размер карты полностью определяется размерами контейнера.
<div id="map"></div>
#map {
width: 800px;
height: 500px;
border: 1px solid #ccc;
}
const map = new mapboxgl.Map({
container: 'map',
style: 'mapbox://styles/mapbox/streets-v12'
});
Mapbox GL JS автоматически адаптирует область рендеринга под размеры контейнера.
Для управления масштабом и вращением используется класс
NavigationControl.
map.addControl(
new mapboxgl.NavigationControl()
);
В результате на карте появляются:
Размещение элемента управления:
map.addControl(
new mapboxgl.NavigationControl(),
'top-right'
);
Доступные позиции:
top-left
top-right
bottom-left
bottom-right
new mapboxgl.Marker()
.setLngLat([37.6176, 55.7558])
.addTo(map);
new mapboxgl.Marker({
color: '#ff0000'
})
.setLngLat([37.6176, 55.7558])
.addTo(map);
new mapboxgl.Marker({
draggable: true
})
.setLngLat([37.6176, 55.7558])
.addTo(map);
Всплывающие окна используются для отображения дополнительной информации.
const popup = new mapboxgl.Popup()
.setHTML(`
<h3>Москва</h3>
<p>Столица России</p>
`);
Привязка к маркеру:
new mapboxgl.Marker()
.setLngLat([37.6176, 55.7558])
.setPopup(popup)
.addTo(map);
После щелчка по маркеру откроется окно с содержимым.
Mapbox GL JS предоставляет развитую событийную модель.
map.on('load', () => {
console.log('Map loaded');
});
map.on('click', (event) => {
console.log(event.lngLat);
});
map.on('zoom', () => {
console.log(map.getZoom());
});
map.on('move', () => {
console.log(map.getCenter());
});
map.on('mousemove', (event) => {
console.log(
event.lngLat.lng,
event.lngLat.lat
);
});
Подобный механизм часто используется при разработке GIS-систем и аналитических панелей.
Mapbox предоставляет несколько готовых стилей.
style: 'mapbox://styles/mapbox/streets-v12'
style: 'mapbox://styles/mapbox/outdoors-v12'
style: 'mapbox://styles/mapbox/light-v11'
style: 'mapbox://styles/mapbox/dark-v11'
style: 'mapbox://styles/mapbox/satellite-v9'
map.setStyle(
'mapbox://styles/mapbox/dark-v11'
);
Mapbox GL JS содержит готовый элемент управления геолокацией.
map.addControl(
new mapboxgl.GeolocateControl({
positionOptions: {
enableHighAccuracy: true
},
trackUserLocation: true
})
);
После активации контроллер:
map.addControl(
new mapboxgl.FullscreenControl()
);
Кнопка позволяет развернуть карту на весь экран браузера.
map.addControl(
new mapboxgl.ScaleControl()
);
Настройка единиц измерения:
map.addControl(
new mapboxgl.ScaleControl({
unit: 'metric'
})
);
Поддерживаются значения:
metric
imperial
nautical
GeoJSON является основным форматом пространственных данных в Mapbox GL JS.
map.on('load', () => {
map.addSource('cities', {
type: 'geojson',
data: {
type: 'FeatureCollection',
features: [
{
type: 'Feature',
geometry: {
type: 'Point',
coordinates: [37.6176, 55.7558]
}
}
]
}
});
});
После добавления источника создаётся слой.
map.addLayer({
id: 'cities-layer',
type: 'circle',
source: 'cities',
paint: {
'circle-radius': 8,
'circle-color': '#007cbf'
}
});
Параметры визуализации определяются в секции paint.
map.addSource('route', {
type: 'geojson',
data: routeData
});
map.addLayer({
id: 'route-line',
type: 'line',
source: 'route',
paint: {
'line-color': '#ff0000',
'line-width': 4
}
});
Подобный подход используется для отображения:
map.addLayer({
id: 'polygon-layer',
type: 'fill',
source: 'polygon-source',
paint: {
'fill-color': '#0080ff',
'fill-opacity': 0.5
}
});
Полигональные слои применяются для визуализации:
map.on('click', 'cities-layer', (event) => {
const feature = event.features[0];
new mapboxgl.Popup()
.setLngLat(feature.geometry.coordinates)
.setHTML(`
<h3>${feature.properties.name}</h3>
`)
.addTo(map);
});
Использование свойств объекта позволяет динамически формировать содержимое окна.
map.setFilter(
'cities-layer',
['==', 'country', 'Kazakhstan']
);
Фильтр применяется без повторной загрузки данных.
Другой пример:
map.setFilter(
'cities-layer',
['>', 'population', 1000000]
);
const source = map.getSource('cities');
source.setData(newGeoJson);
Метод позволяет обновлять карту в режиме реального времени.
Типичные сценарии:
Плавное перемещение камеры выполняется через метод
flyTo.
map.flyTo({
center: [76.9286, 43.2389],
zoom: 12,
speed: 1.2
});
Дополнительные параметры:
map.flyTo({
center: [76.9286, 43.2389],
zoom: 12,
bearing: 45,
pitch: 60,
duration: 5000
});
Настраиваются:
map.setCenter([37.6176, 55.7558]);
map.setZoom(12);
map.setPitch(60);
map.setBearing(90);
const center = map.getCenter();
const zoom = map.getZoom();
const pitch = map.getPitch();
const bearing = map.getBearing();
Такие методы часто используются при сохранении пользовательского состояния интерфейса.
# Project Name
## Description
Описание проекта.
## Features
- Interactive map
- Markers
- GeoJSON support
- Custom styles
## Installation
npm install
## Configuration
MAPBOX_TOKEN=your_token
## Usage
npm run dev
## Examples
Примеры использования.
## API
Описание методов.
## License
MIT
Хорошо организованный README должен содержать полностью рабочие фрагменты кода, минимальный путь запуска проекта, примеры основных сценариев использования Mapbox GL JS и демонстрацию наиболее востребованных возможностей библиотеки: работу со слоями, источниками данных, событиями, элементами управления, анимацией камеры и визуализацией пространственных объектов.