Интеграция Deck.gl с картографическим стеком Google основана на наложении WebGL-слоя поверх экземпляра Google Maps JavaScript API, при котором карта выступает в роли базового тайлового слоя, а Deck.gl отвечает за высокопроизводительную визуализацию больших наборов пространственных данных.
Ключевая идея заключается в разделении ответственности: Google Maps управляет тайлами, проекцией и интерактивностью карты, тогда как Deck.gl рендерит геометрические примитивы (точки, линии, полигоны, 3D-объекты) с использованием WebGL, синхронизированного с камерой карты.
Официальная документация Google Maps JavaScript API: Google Maps JavaScript API Documentation Документация Deck.gl: Deck.gl Documentation
Интеграция строится вокруг концепции overlay-сцены:
В современных версиях Deck.gl используется класс
GoogleMapsOverlay, который инкапсулирует всю связку.
Deck.gl предоставляет готовый адаптер, позволяющий подключить визуализацию без ручного управления WebGL контекстом.
import {GoogleMapsOverlay} from '@deck.gl/google-maps';
import {ScatterplotLayer} from '@deck.gl/layers';
const map = new google.maps.Map(document.getElementById('map'), {
center: { lat: 55.751244, lng: 37.618423 },
zoom: 10,
mapId: 'YOUR_MAP_ID'
});
const deckOverlay = new GoogleMapsOverlay({
layers: [
new ScatterplotLayer({
id: 'scatter',
data: [
{ position: [37.618423, 55.751244], size: 100 }
],
getPosition: d => d.position,
getRadius: d => d.size,
getFillColor: [255, 0, 0]
})
]
});
deckOverlay.setMap(map);
В этой модели Deck.gl автоматически:
Google Maps использует Web Mercator (EPSG:3857). Deck.gl в связке с
GoogleMapsOverlay работает в географических координатах
[longitude, latitude], но внутри преобразует их в экранные
координаты.
Основные особенности:
[lng, lat]При изменении карты (панорамирование, zoom, наклон) Google Maps генерирует события изменения состояния камеры. Deck.gl подписывается на эти события и пересчитывает:
Критические параметры синхронизации:
Deck.gl предоставляет модульную систему слоёв, каждый из которых оптимизирован под конкретный тип данных.
Примеры:
Используется для точечных данных (события, пользователи, точки интереса).
new ScatterplotLayer({
id: 'points',
data,
getPosition: d => d.coordinates,
getRadius: 50,
getFillColor: [0, 128, 255],
radiusUnits: 'meters'
});
Используется для маршрутов и линий движения.
new PathLayer({
id: 'routes',
data,
getPath: d => d.path,
getColor: [255, 140, 0],
widthMinPixels: 2
});
Используется для административных границ и зон.
new PolygonLayer({
id: 'zones',
data,
getPolygon: d => d.geometry,
getFillColor: [0, 200, 0, 100]
});
Интеграция WebGL-слоя с картой требует оптимизации по нескольким направлениям:
Deck.gl группирует геометрии в GPU-буферы, минимизируя draw calls.
На низких zoom уровнях используется агрегация:
Обновляются только изменённые слои, а не вся сцена.
Deck.gl допускает динамическое обновление конфигурации:
deckOverlay.setProps({
layers: [
new ScatterplotLayer({
id: 'dynamic',
data: updatedData,
getPosition: d => d.pos
})
]
});
Обновление состояния не требует пересоздания карты, только пересборки WebGL сцены.
Google Maps обрабатывает DOM-события (click, drag), Deck.gl — WebGL-пиксельные события.
Комбинированный подход:
Пример обработки клика по слою:
new ScatterplotLayer({
id: 'interactive',
data,
pickable: true,
onClick: info => {
console.log(info.object);
}
});
Карта создаётся стандартным способом через Google Maps JavaScript API, который документирован в официальных ресурсах: Google Maps Platform Docs
Deck.gl не заменяет карту, а расширяет её функциональность, добавляя:
Deck.gl рендерится поверх карты через
GoogleMapsOverlay.
Ручная интеграция через deck.Deck и привязку к map
instance.
Используется при:
Google Maps и Deck.gl используют WebGL, поэтому важно избегать двойного управления canvas.
Решение:
GoogleMapsOverlay, который делит контекст
корректноПри неправильной синхронизации матриц возможны смещения объектов.
Решение:
При миллионах точек требуется:
Deck.gl позволяет отображать динамические потоки (например, перемещение транспорта) с интерполяцией позиций.
Используются ColumnLayer, HexagonLayer:
Deck.gl может работать вместе с кастомными tile layers Google Maps, создавая гибридные сцены:
Deck.gl overlay проходит этапы:
Корректное управление важно для предотвращения утечек памяти, особенно при частой смене карт или данных.
В крупных приложениях интеграция часто строится как слой данных поверх карты:
Такой подход позволяет отделить геоданные от визуализации и масштабировать систему горизонтально без переработки UI-слоя.