GridCellLayer представляет собой один из агрегирующих слоёв визуализации, предназначенный для пространственной дискретизации данных и отображения их в виде регулярной сетки. Каждый элемент сетки формируется на основе набора точек, попадающих в соответствующую ячейку, что позволяет эффективно анализировать плотность и распределение данных в больших датасетах.
GridCellLayer разбивает географическое пространство на равномерную сетку заданного размера. Каждая ячейка:
Основная идея заключается в переносе вычислительной нагрузки из CPU-логики приложения в GPU-пайплайн, что особенно важно при работе с десятками и сотнями тысяч точек.
Входные данные слоя — массив объектов, каждый из которых должен содержать координаты и, при необходимости, дополнительные атрибуты:
const data = [
{ position: [37.78, -122.41], value: 10 },
{ position: [37.79, -122.42], value: 20 },
{ position: [37.78, -122.40], value: 5 }
];
Ключевым является поле position, определяющее
принадлежность точки к ячейке сетки.
Определяет размер ячейки сетки в метрах (или в пикселях, в зависимости от режима проекции).
cellSize: 500
Меньшие значения увеличивают детализацию, но повышают нагрузку на GPU.
Функция извлечения координат из объекта данных:
getPosition: d => d.position
Позволяет адаптировать слой под произвольную структуру входных данных.
Используется для определения величины, влияющей на итоговую агрегацию.
getWeight: d => d.value
В случае использования 3D-режима:
getElevation: d => d.value
Включает трёхмерную визуализацию ячеек.
extruded: true
При активации каждая ячейка получает высоту, пропорциональную агрегированному значению.
Контролирует масштаб высоты экструдированных ячеек.
elevationScale: 50
Позволяет регулировать визуальную выразительность без изменения исходных данных.
Определяют цвет заливки и границ ячеек:
getFillColor: d => [255, 140, 0, 180],
getLineColor: [255, 255, 255, 100]
Часто используются для кодирования интенсивности значений.
GridCellLayer выполняет агрегацию автоматически, группируя точки по индексам сетки. Внутри каждой ячейки могут быть рассчитаны:
Алгоритм группировки основан на хешировании координат с учётом размера сетки, что обеспечивает линейную сложность обработки.
В двумерном режиме каждая ячейка отображается как плоский прямоугольник. Используется для тепловых карт и плотностных визуализаций.
При включении extruded ячейки становятся столбцами,
высота которых отражает интенсивность данных. Такой подход часто
применяется в анализе городских данных, трафика и геоаналитики.
GridCellLayer оптимизирован для работы с большими объёмами данных благодаря следующим механизмам:
Особенно важно, что агрегация выполняется на уровне GPU-шейдеров, снижая нагрузку на JavaScript-движок.
Пересчёт сетки происходит только при изменении значимых параметров:
datacellSizegetPositionИзменение визуальных свойств (например, цвета) не вызывает повторной агрегации, что улучшает производительность при интерактивных сценариях.
import {GridCellLayer} from '@deck.gl/aggregation-layers';
const layer = new GridCellLayer({
id: 'grid-cell-layer',
data,
cellSize: 1000,
extruded: true,
elevationScale: 30,
getPosition: d => d.position,
getWeight: d => d.value,
getFillColor: d => {
const intensity = d.value;
return [255, 100 + intensity * 10, 0, 200];
},
pickable: true
});
Слой поддерживает интерактивность через механизм picking. При наведении или клике доступны агрегированные данные ячейки:
Это позволяет строить динамические панели аналитики поверх визуализации.
GridCellLayer поддерживает несколько пространственных систем:
Корректная настройка системы координат критична для точного позиционирования сетки.
GridCellLayer часто используется совместно с:
В отличие от HeatmapLayer, GridCellLayer предоставляет более строгую дискретизацию пространства и контроль над агрегацией.
Внутренняя реализация слоя опирается на фрагментные и вершинные шейдеры, где:
Использование GPU позволяет масштабировать визуализацию до миллионов точек без существенной деградации производительности.
Несмотря на высокую производительность, существуют ограничения:
Эти особенности определяют выбор между GridCellLayer и более гибкими слоями визуализации.