deck.gl Official Documentation
Архитектура deck.gl построена вокруг идеи разделения высокоуровневых визуальных примитивов и низкоуровневых операций WebGL. Большая часть реальной гибкости библиотеки обеспечивается не только слоями, но и набором утилит и вспомогательных модулей, которые отвечают за работу с координатами, данными, атрибутами, производительностью и взаимодействием с картографическими проекциями.
Эти утилиты распределены по нескольким пакетам, прежде всего
@deck.gl/core, @deck.gl/layers и
вспомогательным модулям, и образуют слой инфраструктуры, на котором
строятся все визуальные компоненты.
Одной из ключевых задач в deck.gl является преобразование географических координат в экранные координаты и обратно. Для этого используется система проекций, ориентированная на Web Mercator и альтернативные геодезические модели.
WebMercatorViewport — центральный хелпер для работы с
картографическими преобразованиями. Он обеспечивает:
[lng, lat, z] → screen pixelsЭтот компонент часто используется как промежуточный слой между картографическими движками (Mapbox, Google Maps) и слоями deck.gl.
Внутри он опирается на матричные преобразования 4x4 и использует проекционные функции, оптимизированные для WebGL pipeline.
Внутренние модули deck.gl содержат оптимизированные функции для работы с векторами:
Эти операции активно используются в слоях типа
PathLayer, PolygonLayer,
ScatterplotLayer.
Утилиты геометрии позволяют:
Особенно важна поддержка алгоритмов упрощения геометрии (например, Douglas–Peucker), которая критична при визуализации больших наборов данных.
Deck.gl активно использует концепцию accessor-функций — функций извлечения данных из объектов.
Типичный accessor:
getPosition: d => d.coordinates
Утилиты помогают:
Для повышения производительности deck.gl активно использует бинарные
буферы (ArrayBuffer, TypedArray).
Утилиты позволяют:
Это особенно важно для слоёв, работающих с миллионами точек.
Одним из ключевых внутренних хелперов является
AttributeManager.
Он отвечает за:
Каждый слой описывает набор атрибутов, например:
positionscolorsnormalsinstanceOffsetsAttributeManager решает, какие атрибуты нужно
пересчитать при изменении данных, что критично для
производительности.
Deck.gl включает набор функций для работы с цветами в различных форматах:
[r, g, b, a]#RRGGBBОсновные операции:
Эти утилиты активно используются в ScatterplotLayer,
HeatmapLayer, ColumnLayer.
Deck.gl использует 4x4 матрицы для всех пространственных трансформаций.
Утилиты обеспечивают:
Эти операции лежат в основе всей сцены рендеринга WebGL.
Внутренние хелперы управляют следующей цепочкой:
Утилиты обеспечивают согласованность этих матриц между слоями и viewport.
Система picking (определение объектов под курсором) реализована через вспомогательные утилиты.
Основные функции:
Утилиты позволяют реализовать интерактивность:
Deck.gl содержит инструменты для работы с анимацией:
requestAnimationFrameЭти утилиты используются в слоях:
TripsLayerPathLayerScatterplotLayer (анимированные переходы)Для работы с большими наборами данных используются GPU- и CPU-агрегации:
Эти утилиты оптимизируют визуализацию больших датасетов, уменьшая количество отрисовываемых объектов.
Вспомогательные функции позволяют:
Эти утилиты часто используются как промежуточный слой между API данных и слоями визуализации.
Deck.gl активно применяет memoization для:
Утилиты обеспечивают:
Работа с GPU требует эффективного использования typed arrays:
Float32Array для координатUint8Array для цветовUint32Array для индексовВспомогательные функции позволяют:
В @deck.gl/core присутствует набор системных
хелперов:
Эти механизмы обеспечивают реактивную модель обновления сцены без полного пересоздания WebGL контекста.
Система событий основана на унифицированных хелперах:
Утилиты обеспечивают нормализацию событий между браузерами и синхронизацию с WebGL координатами.
Внутри deck.gl используются дополнительные инфраструктурные хелперы:
Эти компоненты не являются публичным API, но критичны для расширяемости библиотеки.
Утилиты формируют промежуточный слой между:
Именно благодаря этому слою deck.gl сохраняет:
Без этих хелперов библиотека представляла бы собой набор изолированных визуальных компонентов без общей инфраструктурной базы.