import {GPUGridLayerDemo} from 'website-components/doc-demos/aggregation-layers';
The GPUGridLayer
aggregates data into a grid-based heatmap. The color and height of a cell are determined based on the objects it contains. This layer performs aggregation on GPU hence not supported in non WebGL2 browsers.
GPUGridLayer
is one of the sublayers for GridLayer and is only supported when using WebGL2
enabled browsers. It is provided to customize GPU Aggregation for advanced use cases. For any regular use case, GridLayer is recommended.
GPUGridLayer
is a CompositeLayer.
import DeckGL from '@deck.gl/react';
import {GPUGridLayer} from '@deck.gl/aggregation-layers';
function App({data, viewState}) {
/**
* Data format:
* [
* {COORDINATES: [-122.42177834, 37.78346622]},
* ...
* ]
*/
const layer = new GPUGridLayer({
id: 'gpu-grid-layer',
data,
pickable: true,
extruded: true,
cellSize: 200,
elevationScale: 4,
getPosition: d => d.COORDINATES
});
return <DeckGL viewState={viewState}
layers={[layer]}
getTooltip={({object}) => object && `${object.position.join(', ')}\nCount: ${object.count}`} />;
}
Note: The GPUGridLayer
at the moment only works with COORDINATE_SYSTEM.LNGLAT
.
Note: GPU Aggregation is faster only when using large data sets (data size is more than 500K), for smaller data sets GPU Aggregation could be potentially slower than CPU Aggregation.
Note: This layer is similar to CPUGridLayer but performs aggregation on GPU. Check below for more detailed differences of this layer compared to CPUGridLayer
.
To install the dependencies from NPM:
npm install deck.gl
# or
npm install @deck.gl/core @deck.gl/layers @deck.gl/aggregation-layers
import {GPUGridLayer} from '@deck.gl/aggregation-layers';
new GPUGridLayer({});
To use pre-bundled scripts:
<script src="https://unpkg.com/deck.gl@^8.0.0/dist.min.js"></script>
<!-- or -->
<script src="https://unpkg.com/@deck.gl/core@^8.0.0/dist.min.js"></script>
<script src="https://unpkg.com/@deck.gl/layers@^8.0.0/dist.min.js"></script>
<script src="https://unpkg.com/@deck.gl/aggregation-layers@^8.0.0/dist.min.js"></script>
new deck._GPUGridLayer({});
Inherits from all Base Layer and CompositeLayer properties.
- Default:
1000
Size of each cell in meters. Must be greater than 0
.
- Default:
[min(colorWeight), max(colorWeight)]
Color scale domain, default is set to the extent of aggregated weights in each cell. You can control how the colors of cells are mapped to weights by passing in an arbitrary color domain. This is useful when you want to render different data input with the same color mapping for comparison.
- Default: colorbrewer
6-class YlOrRd
Specified as an array of colors [color1, color2, ...]. Each color is an array of 3 or 4 values [R, G, B] or [R, G, B, A], representing intensities of Red, Green, Blue and Alpha channels. Each intensity is a value between 0 and 255. When Alpha not provided a value of 255 is used.
colorDomain
is divided into colorRange.length
equal segments, each mapped to one color in colorRange
.
- Default:
1
Cell size multiplier, clamped between 0 - 1. The displayed size of cell is calculated by coverage * cellSize
.
Note: coverage does not affect how objects are binned.
- Default:
[0, max(elevationWeight)]
Elevation scale input domain, default is set to between 0 and the max of aggregated weights in each cell. You can control how the elevations of cells are mapped to weights by passing in an arbitrary elevation domain. This is useful when you want to render different data input with the same elevation scale for comparison.
- Default:
[0, 1000]
Elevation scale output range
- Default:
1
Cell elevation multiplier. This is a handy property to scale the height of all cells without updating the data.
- Default:
true
Whether to enable cell elevation. If set to false, all cell will be flat.
- Default:
true
This is an object that contains material props for lighting effect applied on extruded polygons. Check the lighting guide for configurable settings.
- Default: 'SUM'
Defines the operation used to aggregate all data object weights to calculate a cell's color value. Valid values are 'SUM', 'MEAN', 'MIN' and 'MAX'. 'SUM' is used when an invalid value is provided.
getColorWeight
and colorAggregation
together determine the elevation value of each cell.
- Default: 'SUM'
Defines the operation used to aggregate all data object weights to calculate a cell's elevation value. Valid values are 'SUM', 'MEAN', 'MIN' and 'MAX'. 'SUM' is used when an invalid value is provided.
getElevationWeight
and elevationAggregation
together determine the elevation value of each cell.
getPosition
(Function, optional)
- Default:
object => object.position
Method called to retrieve the position of each object.
- Default:
1
The weight of a data object used to calculate the color value for a cell.
- If a number is provided, it is used as the weight for all objects.
- If a function is provided, it is called on each object to retrieve its weight.
- Default:
1
The weight of a data object used to calculate the elevation value for a cell.
- If a number is provided, it is used as the weight for all objects.
- If a function is provided, it is called on each object to retrieve its weight.
Due to the nature of GPU Aggregation implementation following CPUGridLayer props are not supported by this layer.
upperPercentile
lowerPercentile
elevationUpperPercentile
, elevationLowerPercentile
, getColorValue
, getElevationValue
, onSetColorDomain
and onSetElevationDomain
Instead of getColorValue
, getColorWeight
and colorAggregation
should be used. Instead of getElevationValue
, getElevationWeight
and elevationAggregation
should be used. There is no alternate for all other unsupported props, if they are needed CPUGridLayer
should be used instead of this layer.
When picking mode is hover
, only the elevation value, color value of selected cell are included in picking result. Array of all objects that aggregated into that cell is not provided. For all other modes, picking results match with CPUGridLayer
, for these cases data is aggregated on CPU to provide array of all objects that aggregated to the cell.