The CPUGridLayer
renders a grid heatmap based on an array of points.
It takes the constant cell size, aggregates input points into cells. Aggregation is performed on CPU. The color
and height of the cell is scaled by number of points it contains.
CPUGridLayer
is one of the sublayers for GridLayer, and is provided to customize CPU Aggregation for advanced use cases. For any regular use case, GridLayer is recommended.
CPUGridLayer
is a CompositeLayer.
import DeckGL from '@deck.gl/react';
import {CPUGridLayer} from '@deck.gl/aggregation-layers';
const App = ({data, viewport}) => {
/**
* Data format:
* [
* {COORDINATES: [-122.42177834, 37.78346622]},
* ...
* ]
*/
const layer = new CPUGridLayer({
id: 'grid-layer',
data,
pickable: true,
extruded: true,
cellSize: 200,
elevationScale: 4,
getPosition: d => d.COORDINATES,
onHover: ({object, x, y}) => {
const tooltip = `${object.position.join(', ')}\nCount: ${object.count}`;
/* Update tooltip
http://deck.gl/#/documentation/developer-guide/adding-interactivity?section=example-display-a-tooltip-for-hovered-object
*/
}
});
return (<DeckGL {...viewport} layers={[layer]} />);
};
Note: The CPUGridLayer
at the moment only works with COORDINATE_SYSTEM.LNGLAT
.
To install the dependencies from NPM:
npm install deck.gl
# or
npm install @deck.gl/core @deck.gl/layers @deck.gl/aggregation-layers
import {CPUGridLayer} from '@deck.gl/aggregation-layers';
new CPUGridLayer({});
To use pre-bundled scripts:
<script src="https://unpkg.com/deck.gl@^7.0.0/dist.min.js"></script>
<!-- or -->
<script src="https://unpkg.com/@deck.gl/core@^7.0.0/dist.min.js"></script>
<script src="https://unpkg.com/@deck.gl/layers@^7.0.0/dist.min.js"></script>
<script src="https://unpkg.com/@deck.gl/aggregation-layers@^7.0.0/dist.min.js"></script>
new deck.CPUGridLayer({});
Inherits from all Base Layer and CompositeLayer properties.
- Default:
1000
Size of each cell in meters
- Default:
[min(count), max(count)]
Color scale domain, default is set to the range of point counts in each cell.
Specified as an array of 6 colors [color1, color2, ... color6]. 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. By default colorRange
is set to
colorbrewer 6-class YlOrRd
.
- Default:
1
Cell size multiplier, clamped between 0 - 1. The final size of cell
is calculated by coverage * cellSize
. Note: coverage does not affect how points
are binned. Coverage are linear based.
- Default:
[0, max(count)]
Elevation scale input domain, default is set to the extent of point counts in each cell.
- Default:
[0, 1000]
Elevation scale output range
- Default:
1
Cell elevation multiplier. The elevation of cell is calculated by
elevationScale * getElevation(d)
.
elevationScale
is a handy property to scale all cells without updating the data.
- Default:
true
Whether to enable cell elevation. Cell elevation scale by count of points in each cell. If set to false, all cell will be flat.
- Default:
100
Filter cells and re-calculate color by upperPercentile
. Cells with value
larger than the upperPercentile will be hidden.
- Default:
0
Filter cells and re-calculate color by lowerPercentile
. Cells with value
smaller than the lowerPercentile will be hidden.
- Default:
100
Filter cells and re-calculate elevation by elevationUpperPercentile
. Cells with elevation value
larger than the elevationUpperPercentile will be hidden.
- Default:
100
Filter cells and re-calculate elevation by elevationLowerPercentile
. Cells with elevation value
smaller than the elevationLowerPercentile will be hidden.
- Default: 'quantize'
Scaling function used to determine the color of the grid cell, default value is 'quantize'. Supported Values are 'quantize', 'linear', 'quantile' and 'ordinal'.
- Default:
true
This is an object that contains material props for lighting effect applied on extruded polygons. Check the lighting guide for configurable settings.
getPosition
(Function, optional)
- Default:
object => object.position
Method called to retrieve the position of each point.
- Default:
points => points.length
getColorValue
is the accessor function to get the value that cell color is based on.
It takes an array of points inside each cell as arguments, returns a number. For example,
You can pass in getColorValue
to color the cells by avg/mean/max of a specific attributes of each point.
By default getColorValue
returns the length of the points array.
class MyGridLayer {
renderLayers() {
return new CPUGridLayer({
id: 'grid-layer',
getColorValue: points => points.length
data,
cellSize: 500
});
}
}
- Default:
point => 1
getColorWeight
is the accessor function to get the weight of a point used to calculate the color value for a cell.
- Default: 'SUM'
colorAggregation
defines, operation used to aggregate all data point 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.
Note: getColorWeight
and colorAggregation
together define how color value of cell is determined, same can be done by setting getColorValue
prop. But to enable GPU aggregation, former props must be provided instead of later.
- Using
getColorValue
...
const layer = new CPUGridLayer({
id: 'my-grid-layer',
...
getColorValue: points => points.length,
...
});
- Using
getColorWeight
andcolorAggregation
...
const layer = new CPUGridLayer({
id: 'my-grid-layer',
...
getColorWeight: point => 1,
colorAggregation: 'SUM'
...
});
- Using
getColorValue
function getMean(points) {
return points.reduce((sum, p) => sum += p.SPACES, 0) / points.length;
}
...
const layer = new CPUGridLayer({
id: 'my-grid-layer',
...
getColorValue: getMean,
...
});
- Using
getColorWeight
andcolorAggregation
...
const layer = new CPUGridLayer({
id: 'my-grid-layer',
...
getColorWeight: point => point.SPACES,
colorAggregation: 'SUM'
...
});
If your use case requires aggregating using an operation that is not one of 'SUM', 'MEAN', 'MAX' and 'MIN', getColorValue
should be used to define such custom aggregation function. In those cases GPU aggregation is not supported.
- Default:
points => points.length
Similar to getColorValue
, getElevationValue
is the accessor function to get the value that cell elevation is based on.
It takes an array of points inside each cell as arguments, returns a number.
By default getElevationValue
returns the length of the points array.
- Default:
point => 1
getElevationWeight
is the accessor function to get the weight of a point used to calculate the elevation value for a cell.
- Default: 'SUM'
elevationAggregation
defines, operation used to aggregate all data point 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.
Note: getElevationWeight
and elevationAggregation
together define how elevation value of cell is determined, same can be done by setting getColorValue
prop. But to enable GPU aggregation, former props must be provided instead of later.
- Using
getElevationValue
...
const layer = new CPUGridLayer({
id: 'my-grid-layer',
...
getElevationValue: points => points.length
...
});
- Using
getElevationWeight
andelevationAggregation
...
const layer = new CPUGridLayer({
id: 'my-grid-layer',
...
getElevationWeight: point => 1,
elevationAggregation: 'SUM'
...
});
Example2 : Using maximum value of 'SPACES' field of data elements to encode the elevation of the cell
- Using
getElevationValue
function getMax(points) {
return points.reduce((max, p) => p.SPACES > max ? p.SPACES : max, -Infinity);
}
...
const layer = new CPUGridLayer({
id: 'my-grid-layer',
...
getElevationValue: getMax,
...
});
- Using
getElevationWeight
andelevationAggregation
...
const layer = new CPUGridLayer({
id: 'my-grid-layer',
...
getElevationWeight: point => point.SPACES,
elevationAggregation: 'MAX'
...
});
If your use case requires aggregating using an operation that is not one of 'SUM', 'MEAN', 'MAX' and 'MIN', getElevationValue
should be used to define such custom aggregation function. In those cases GPU aggregation is not supported.
- Default:
() => {}
This callback will be called when bin color domain has been calculated.
- Default:
() => {}
This callback will be called when bin elevation domain has been calculated.
The CPUGridLayer renders the following sublayers:
grid-cell
- a GridCellLayer rendering the aggregated columns.