Deck.gl опирается на строгую модель координат, которая определяет, как географические и абстрактные данные преобразуются в сцену WebGL. Работа с координатами в этой библиотеке не сводится к простому отображению точек на карте: каждый слой (layer) может использовать собственную систему отсчёта, трансформации и проекцию, а вся сцена строится через унифицированный пайплайн преобразований.
Основой большинства сценариев является система LNGLAT (longitude/latitude) — географические координаты в градусах:
Эта система сама по себе не является евклидовой: расстояния искажаются при переходе к плоской карте. Поэтому она всегда требует проекции перед рендерингом.
В Deck.gl она используется как входная система координат для геопространственных данных: GeoJSON, маршрутов, точек интереса, тайлов.
Большинство картографических приложений опирается на Web Mercator (EPSG:3857) — стандарт де-факто для веб-карт.
Характерные особенности:
В Deck.gl Web Mercator не используется напрямую как пользовательская
система координат, но становится промежуточной стадией в проекциях через
view-projection matrix.
Основная идея:
LNGLAT → Web Mercator → Clip Space → Screen Space
Ключевой механизм управления координатами — параметр:
coordinateSystemОн задаёт, как интерпретируются входные данные слоя.
Основные режимы:
Используется по умолчанию для геоданных.
Система метровых смещений относительно точки опоры.
coordinateOriginПример поведения:
Комбинированная система:
Используется для высокоточного позиционирования объектов рядом с фиксированной географической точкой.
Полностью абстрактная декартова система:
Применяется в:
При работе с большими географическими сценами возникает проблема потери точности float32 в WebGL. Для её решения используется смещение относительно опорной точки:
coordinateOrigin: [lon, lat, altitude]Все координаты внутри слоя могут пересчитываться относительно этой точки.
Преимущества:
Внутри Deck.gl координаты проходят несколько этапов:
User Space
Model Space
World Space
View Space
Clip Space
Screen Space
Каждый слой может участвовать в этом пайплайне по-разному, в
зависимости от coordinateSystem.
Deck.gl активно использует матрицы 4×4:
Итоговая трансформация:
position_screen = Projection * View * Model * position_world
Особенность геопространственных слоёв — наличие дополнительного географического преобразования до модели.
Для LNGLAT используется сферическая модель Земли:
Проекция упрощается до Web Mercator для визуализации, но логика геометрии сохраняет сферическую основу.
В Deck.gl zoom влияет не только на камеру, но и на:
При увеличении zoom:
Координаты при этом могут динамически пересчитываться через
project() и unproject().
Два ключевых инструмента:
Преобразует географические координаты в мировые:
Обратное преобразование:
Используется для:
Помимо непрерывных координат, Deck.gl поддерживает дискретные сетки, например H3 indexing.
Особенности:
В этом случае геометрия строится через центр ячейки и её границы, а не через классические LNGLAT-пары.
При работе с картографическими слоями используется tile-based координатная структура:
Deck.gl синхронизирует тайлы с глобальной системой через:
Добавление третьей координаты (Z) расширяет модель до 3D:
В LNGLAT режиме высота интерпретируется как:
В METER_OFFSETS:
Проблема WebGL — ограниченная точность float32. Deck.gl решает её через:
Дополнительно:
В GPU координаты приходят уже трансформированными:
Шейдеры оперируют:
Пример логики:
Deck.gl допускает одновременное использование нескольких систем:
Это достигается через изоляцию transform pipeline для каждого layer.
При взаимодействии с пользователем координаты проходят обратный путь:
Это позволяет:
Некоторые слои (PathLayer, ScatterplotLayer) работают с массивами координат:
Оптимизация:
Для корректного наложения слоёв важно:
Несовпадение систем приводит к:
Помимо географии, Deck.gl активно используется для:
В этих случаях координаты теряют географический смысл и становятся:
Такая гибкость достигается через CARTESIAN и кастомные трансформации.