Проекция globe в Mapbox GL JS представляет собой
трёхмерную модель Земли, в которой карта отображается как сфера, а не
как плоская проекция Меркатора. Это изменяет не только визуальное
восприятие данных, но и поведение камеры, освещения, зума и
взаимодействия с пользователем.
Глобальная проекция активируется на уровне конфигурации карты через
параметр projection:
mapboxgl.accessToken = 'YOUR_TOKEN';
const map = new mapboxgl.Map({
container: 'map',
style: 'mapbox://styles/mapbox/streets-v12',
projection: 'globe'
});
После этого карта перестаёт быть плоской и начинает рендериться как сфера с корректной геометрией долготы и широты.
По умолчанию Mapbox GL JS использует проекцию Web Mercator, которая:
Глобусная проекция:
Ключевое отличие заключается в том, что вместо координат на плоскости используется сферическая модель.
При включённой проекции globe камера начинает работать в
трёхмерном пространстве. Важные параметры:
center — точка фокусировкиzoom — приближение к сфереbearing — поворот вокруг вертикальной осиpitch — наклон камерыПример настройки начального положения:
const map = new mapboxgl.Map({
container: 'map',
style: 'mapbox://styles/mapbox/satellite-streets-v12',
projection: 'globe',
center: [30, 50],
zoom: 2,
pitch: 30,
bearing: 0
});
При увеличении pitch глобус визуально «наклоняется»,
создавая эффект орбитального обзора.
Глобусная проекция поддерживает атмосферные эффекты, которые усиливают ощущение объёмности:
map.on('load', () => {
map.setFog({
color: 'rgb(186, 210, 235)',
'high-color': 'rgb(36, 92, 223)',
'horizon-blend': 0.1,
'space-color': 'rgb(11, 11, 25)',
'star-intensity': 0.35
});
});
Fog (туман) отвечает за:
Дополнительно может использоваться освещение:
map.setLight({
anchor: 'map',
color: 'white',
intensity: 0.4
});
В глобальной проекции зум работает не как масштабирование плоскости, а как изменение расстояния до сферы.
Особенности:
Это влияет на UX: пользователь воспринимает карту как объект в пространстве, а не как поверхность.
При переходе между проекциями возможна анимация:
map.setProjection('globe');
или возврат к Меркатору:
map.setProjection('mercator');
При переключении происходят внутренние трансформации:
Важно учитывать, что резкое переключение может вызывать визуальные скачки, поэтому часто используется анимация состояния.
В глобусной проекции источники данных (sources) ведут себя аналогично плоской карте, но их визуализация подчиняется сферической геометрии.
GeoJSON-слои:
map.addSource('cities', {
type: 'geojson',
data: '/data/cities.geojson'
});
map.addLayer({
id: 'cities-layer',
type: 'circle',
source: 'cities',
paint: {
'circle-radius': 6,
'circle-color': '#ff5722'
}
});
Разница проявляется в:
При globe-проекции система тайлов работает с
дополнительной логикой:
Это может влиять на производительность при высоких уровнях детализации.
События взаимодействия остаются теми же:
clickmousemovemouseentermouseleaveОднако координаты событий интерпретируются через сферическую модель:
map.on('click', (e) => {
console.log(e.lngLat);
});
lngLat остаётся логическим представлением координат на
поверхности сферы, несмотря на трёхмерный рендер.
Глобусная проекция часто используется вместе с орбитальной анимацией:
function rotate() {
const center = map.getCenter();
center.lng += 0.2;
map.easeTo({ center, duration: 1000, easing: (n) => n });
requestAnimationFrame(rotate);
}
rotate();
Такой подход создаёт эффект медленного вращения планеты, что усиливает пространственное восприятие.
Некоторые визуальные приёмы особенно важны:
fog, чтобы скрывать резкий край
горизонтаПример стилизации воды:
map.setPaintProperty('water', 'fill-color', '#1a3a5c');
Глобусная проекция более ресурсоёмка по сравнению с 2D:
Практические оптимизации:
Вблизи полюсов возникают характерные эффекты:
Текстовые метки могут требовать дополнительных правил:
layout: {
'text-allow-overlap': false,
'text-ignore-placement': false
}
Это снижает визуальный шум в полярных областях.
Глобусная проекция может работать вместе с рельефом:
map.setTerrain({ source: 'mapbox-dem', exaggeration: 1.5 });
В этом случае поверхность глобуса приобретает локальную высотную детализацию, что усиливает эффект реалистичности.
При globe-режиме камера перестаёт быть абстрактным
понятием 2D-сцены и начинает вести себя как наблюдатель в
3D-пространстве:
Это требует более внимательной работы с UX-настройками, особенно при переключении состояний карты.