История развития библиотеки

Развитие веб-картографии долгое время основывалось на растровых тайлах. Такие карты представляли собой заранее подготовленные изображения, которые загружались браузером по мере перемещения пользователя по карте. Подобный подход активно использовался многими картографическими платформами, включая ранние версии сервисов Google Maps, OpenStreetMap и многочисленные коммерческие решения.

Растровая модель обладала рядом ограничений:

  • высокая нагрузка на серверы при генерации тайлов разных масштабов;
  • ограниченные возможности визуальной кастомизации;
  • невозможность динамически изменять внешний вид объектов без перегенерации изображений;
  • увеличение объёма передаваемых данных при сложных стилях оформления.

К началу 2010-х годов развитие браузерных технологий привело к широкому распространению поддержки WebGL — стандарта аппаратного ускорения графики в веб-приложениях. Это создало предпосылки для перехода от растровых карт к векторным данным и рендерингу непосредственно на стороне клиента.

Именно в этих условиях появилась библиотека Mapbox GL JS.


Компания Mapbox и её роль в развитии веб-картографии

Компания Mapbox была основана в 2010 году как поставщик инструментов для создания и кастомизации цифровых карт. В отличие от многих конкурентов, компания сделала ставку на открытые данные OpenStreetMap и современные методы визуализации геоданных.

Одной из ключевых целей Mapbox стало создание платформы, позволяющей:

  • полностью контролировать внешний вид карт;
  • использовать векторные данные вместо растровых изображений;
  • создавать интерактивные стили в режиме реального времени;
  • обеспечивать высокую производительность даже при большом количестве объектов.

Для реализации этих задач потребовался новый клиентский движок, способный использовать возможности графических процессоров через WebGL.


Появление технологии Mapbox GL

До появления Mapbox GL большая часть картографических JavaScript-библиотек работала через DOM, SVG или Canvas. Эти технологии подходили для отображения небольшого количества объектов, однако начинали испытывать серьёзные проблемы производительности при работе с крупными наборами геоданных.

Инженеры Mapbox начали разработку новой технологии, получившей название Mapbox GL (Graphics Library).

Основные идеи нового подхода:

  • хранение данных в векторном формате;
  • рендеринг средствами WebGL;
  • использование графического процессора пользователя;
  • разделение данных и стилей;
  • динамическое изменение оформления без перезагрузки карты.

Вместо загрузки готовых изображений браузер получал геометрические данные объектов — дороги, здания, водоёмы, административные границы. Отрисовка происходила локально на устройстве пользователя.

Такой подход существенно изменил принципы построения веб-карт.


Первый выпуск Mapbox GL JS

Первые публичные версии Mapbox GL JS появились в середине 2010-х годов. Библиотека стала JavaScript-реализацией движка Mapbox GL и позволила использовать преимущества WebGL непосредственно в браузере.

На фоне существующих решений библиотека предлагала несколько инновационных возможностей:

Векторные тайлы

Карта загружала не изображения, а компактные наборы геометрических данных.

Преимущества:

  • меньший объём передаваемых данных;
  • высокая чёткость на любых масштабах;
  • отсутствие размытия при масштабировании;
  • возможность повторного использования данных для различных стилей.

Аппаратное ускорение

Рендеринг выполнялся через видеокарту.

Это обеспечило:

  • плавное масштабирование;
  • быстрые анимации;
  • поддержку трёхмерных сцен;
  • отображение больших наборов объектов.

Стилизация через JSON

Внешний вид карты описывался декларативным JSON-документом.

Например, отдельно определялись:

  • источники данных;
  • слои отображения;
  • цвета;
  • размеры линий;
  • шрифты;
  • правила отображения.

Подобная архитектура значительно упростила создание собственных дизайнов карт.


Развитие спецификации Mapbox Style Specification

Одновременно с развитием библиотеки формировалась спецификация оформления карт — Mapbox Style Specification.

Она стала одним из важнейших компонентов всей экосистемы.

Спецификация определяла:

  • структуру стилей;
  • типы слоёв;
  • источники данных;
  • правила фильтрации;
  • механизмы выражений (Expressions).

Появление единого формата позволило использовать один и тот же стиль:

  • в веб-приложениях;
  • на мобильных устройствах;
  • в настольных решениях;
  • в серверных инструментах визуализации.

Со временем спецификация стала фактическим стандартом для многих проектов, работающих с векторными картами.


Переход к трёхмерной картографии

Одним из наиболее заметных этапов развития Mapbox GL JS стало внедрение поддержки трёхмерных объектов.

Появились возможности отображения:

  • экструзий зданий;
  • рельефа местности;
  • трёхмерных моделей;
  • наклонённых перспективных видов.

Для веб-карт это стало серьёзным технологическим шагом вперёд.

Пример концепции отображения зданий:

map.addLayer({
    id: 'buildings',
    type: 'fill-extrusion',
    source: 'composite',
    'source-layer': 'building',
    paint: {
        'fill-extrusion-color': '#aaa',
        'fill-extrusion-height': ['get', 'height']
    }
});

Подобные возможности ранее требовали специализированных GIS-систем или отдельных 3D-движков.


Развитие системы выражений (Expressions)

Одним из наиболее значимых нововведений стала система Expressions.

До её появления настройка карт часто требовала программной обработки данных на стороне JavaScript.

Выражения позволили переносить значительную часть логики непосредственно в стиль карты.

С их помощью стало возможно:

  • изменять цвет объектов по атрибутам;
  • рассчитывать размеры символов;
  • выполнять условное форматирование;
  • создавать тематические карты;
  • управлять отображением данных в зависимости от масштаба.

Пример:

[
    'match',
    ['get', 'type'],
    'park', '#4CAF50',
    'water', '#2196F3',
    '#999999'
]

Появление Expressions существенно расширило возможности визуальной аналитики.


Формирование экосистемы Mapbox

По мере роста популярности библиотеки вокруг неё сформировалась большая экосистема инструментов.

В неё вошли:

Mapbox Studio

Графическая среда создания картографических стилей.

Позволяла:

  • проектировать карты без программирования;
  • публиковать стили;
  • управлять источниками данных;
  • тестировать внешний вид карт.

Tilesets

Инструменты подготовки и публикации векторных наборов данных.

Использовались для:

  • транспортных схем;
  • городских карт;
  • геоаналитических проектов;
  • корпоративных GIS-систем.

SDK для мобильных платформ

Технологии Mapbox GL были перенесены на:

  • Android;
  • iOS;
  • настольные решения.

Это обеспечило единый подход к разработке картографических приложений на разных устройствах.


Рост популярности среди разработчиков

Вторая половина 2010-х годов стала периодом активного распространения Mapbox GL JS.

Причинами популярности стали:

Высокая производительность

WebGL позволял отображать десятки тысяч объектов без серьёзного падения скорости работы интерфейса.

Гибкость оформления

Разработчики получили практически полный контроль над внешним видом карты.

Простота интеграции

Минимальный пример подключения выглядел следующим образом:

const map = new mapboxgl.Map({
    container: 'map',
    style: 'mapbox://styles/mapbox/streets-v11',
    center: [37.6176, 55.7558],
    zoom: 10
});

Поддержка современных фреймворков

Библиотека активно использовалась вместе с:

  • React;
  • Vue;
  • Angular;
  • Svelte;
  • Next.js.

Изменение лицензирования и появление форков

Одним из наиболее важных событий в истории проекта стало изменение лицензионной политики.

До версии 1.x библиотека распространялась под открытой лицензией BSD. Это обеспечивало широкое участие сообщества и возможность свободного использования исходного кода.

В конце 2020 года Mapbox объявила о переходе на собственную коммерческую лицензию для новых версий Mapbox GL JS.

Последствия оказались значительными:

  • часть разработчиков осталась на старых версиях;
  • возникли вопросы совместимости открытых проектов;
  • сообщество инициировало создание независимых форков.

Наиболее известным результатом стал проект MapLibre GL JS.


Возникновение MapLibre GL JS

После изменения лицензии группа компаний и независимых разработчиков создала проект MapLibre.

Его задачами стали:

  • сохранение открытого исходного кода;
  • развитие архитектуры Mapbox GL JS версии 1.x;
  • поддержка новых возможностей;
  • независимое управление проектом.

MapLibre быстро превратился в самостоятельную платформу и сегодня рассматривается как одно из ключевых решений в области открытой веб-картографии.

Несмотря на общее происхождение, развитие Mapbox GL JS и MapLibre GL JS постепенно пошло разными путями.


Современный этап развития

Современные версии Mapbox GL JS значительно отличаются от первых релизов.

Библиотека поддерживает:

  • сложные 3D-сцены;
  • освещение объектов;
  • атмосферные эффекты;
  • отображение рельефа;
  • интеграцию с геопространственной аналитикой;
  • пользовательские WebGL-слои;
  • визуализацию больших объёмов данных.

Появились инструменты для:

  • работы со спутниковыми изображениями;
  • построения навигационных интерфейсов;
  • отображения данных в реальном времени;
  • интеграции с системами машинного обучения и анализа пространственных данных.

Mapbox GL JS продолжает оставаться одной из наиболее технологически развитых библиотек для создания интерактивных карт в браузере, оказав значительное влияние на развитие всей отрасли веб-картографии и сформировав многие современные подходы к работе с векторными геоданными, стилями карт и аппаратно ускоренной визуализацией пространственной информации.