maplibre-native
Кроссплатформенная библиотека для отображения интерактивных карт, созданная как форк Mapbox GL Native с открытой лицензией. Она предоставляет мощный движок для рендеринга векторных карт с поддержкой пользовательских стилей, анимаций и аппаратного ускорения. Библиотека позволяет создавать современные картографические приложения для нативных платформ с высокой производительностью и гибкостью.
Особенности
- поддержка векторных тайлов в форматах Mapbox Vector Tiles (MVT) и GeoJSON;
- аппаратное ускорение рендеринга через OpenGL (Android, Linux, Windows) и Metal (iOS/macOS);
- динамическая стилизация карт с использованием JSON-стилей, совместимых с Mapbox GL;
- поддержка 3D-эффектов, анимаций и плавных переходов;
- оффлайн-карты и кэширование тайлов.
Основные компоненты
MapLibre Native состоит из нескольких ключевых модулей, которые обеспечивают загрузку данных, рендеринг карт и взаимодействие с пользователем (подробнее с документацией можно ознакомиться здесь).
Загрузка и обработка тайлов
Библиотека поддерживает загрузку векторных и растровых тайлов из различных источников, включая удаленные серверы, локальные файлы и базы данных. Движок оптимизирует загрузку и кэширование тайлов для минимизации использования сети и памяти.
Основные функции работы с тайлами:
- Поддержка протоколов HTTP/HTTPS для загрузки тайлов;
- Загрузка тайлов из локальных источников (MBTiles, файловая система);
- Кэширование тайлов в памяти и на диске;
- Поддержка тайловых схем (xyz, tms, wms-c);
- Динамическая подгрузка тайлов при панорамировании и масштабировании.
Стилизация и оформление карт
MapLibre Native использует стили в формате JSON, совместимые с Mapbox GL, что позволяет определять внешний вид всех элементов карты: дорог, зданий, меток, водных объектов и других слоев. Стили могут быть изменены динамически во время выполнения.
Возможности стилизации:
- Векторные стили с использованием выражений (expressions) для условного оформления;
- Поддержка пользовательских шрифтов и иконок;
- Градиенты, тени, свечения и другие графические эффекты;
- Анимация переходов между состояниями стилей;
- Поддержка переменных и функций для динамического изменения стилей.
Рендеринг и графический движок
Движок рендеринга использует низкоуровневые графические API (OpenGL ES, Metal) для отрисовки векторных данных с высокой производительностью. Он поддерживает сложные визуальные эффекты, 3D-преобразования и плавную анимацию.
Графические возможности:
- Аппаратное ускорение рендеринга на поддерживаемых платформах;
- Поддержка 3D-зданий и рельефа (через высотные карты);
- Сглаживание и антиалиасинг для улучшения качества изображения;
- Эффекты освещения и тени для 3D-объектов;
- Оптимизированная отрисовка большого количества объектов.
Взаимодействие с пользователем
Библиотека предоставляет богатый набор жестов и событий для взаимодействия с картой: панорамирование, масштабирование, вращение, наклон. Поддерживается обработка мультитач-жестов и пользовательских событий.
Функции взаимодействия:
- Панорамирование (drag), масштабирование (pinch, double-tap);
- Вращение карты (rotation gesture);
- Наклон (pitch) для перехода в 3D-вид;
- Обработка кликов и тапов на объекты карты;
- События для программируемого управления картой.
Географические данные и источники
MapLibre Native поддерживает различные источники географических данных, включая векторные тайлы, растровые изображения, GeoJSON и пользовательские источники. Данные могут быть загружены как из стандартных сервисов, так и из пользовательских источников.
Поддерживаемые источники данных:
- Векторные тайлы (MVT) из Mapbox, OpenStreetMap и других поставщиков;
- Растровые тайлы (PNG, JPEG, WebP);
- GeoJSON данные для отображения пользовательских объектов;
- Изображения (ImageSource) для наложения растровых изображений на карту;
- Видео (VideoSource) для наложения видео на географические координаты.
Производительность и оптимизация
Библиотека оптимизирована для работы на мобильных устройствах и в средах с ограниченными ресурсами. Включает такие оптимизации, как отложенная загрузка, уровень детализации (LOD) и эффективное использование памяти.
Оптимизации производительности:
- Отложенная загрузка тайлов вне видимой области;
- Динамическое управление уровнем детализации в зависимости от масштаба;
- Батчинг и инстансинг для уменьшения количества draw calls;
- Оптимизированные алгоритмы определения видимых объектов (frustum culling);
- Поддержка многопоточного декодирования тайлов.
Платформенная интеграция
MapLibre Native предоставляет нативные API для каждой поддерживаемой платформы, что позволяет легко интегрировать библиотеку в существующие приложения. Доступны обертки для различных языков программирования и фреймворков.
Поддерживаемые платформы и интеграции:
- Android: Java и Kotlin API, интеграция с Android Views;
- iOS/macOS: Objective-C и Swift API, поддержка UIKit и AppKit;
- Linux: C++ API, интеграция с Qt и другими фреймворками;
- Windows: C++ API, поддержка Win32 и UWP;
- React Native: компоненты для кросс-платформенной разработки;
- Flutter: плагин для использования в приложениях Flutter.
Оффлайн-карты и локальное хранение
Библиотека поддерживает работу с оффлайн-картами, позволяя загружать и хранить тайлы локально для использования без интернет-подключения. Это особенно полезно для приложений, работающих в условиях ограниченной связи.
Оффлайн-возможности:
- Загрузка и кэширование тайлов для определенных регионов;
- Поддержка формата MBTiles для локального хранения тайлов;
- Управление кэшем тайлов (очистка, обновление, мониторинг);
- Использование предварительно загруженных стилей и ресурсов.