Skip to main content

SelectionLayer

From v9.0

This layer can be used to select deck.gl objects using mouse drawing.

import * as React from 'react';
import ReactDOM from 'react-dom';
import DeckGL from '@deck.gl/react';
import { ScatterplotLayer } from '@deck.gl/layers';
import { SelectionLayer } from '@deck.gl-community/editable-layers';
import { StaticMap } from 'react-map-gl';

const MAPBOX_ACCESS_TOKEN = ''; // add your mapbox token here

const initialViewState = {
longitude: -73.986022,
latitude: 40.730743,
zoom: 12,
};

const MALE_COLOR = [0, 128, 255];
const FEMALE_COLOR = [255, 0, 128];
const DATA_URL =
'https://raw.githubusercontent.com/visgl/deck.gl-data/master/examples/scatterplot/manhattan.json'; // eslint-disable-line

const App = function () {
const radius = 30;
const maleColor = MALE_COLOR;
const femaleColor = FEMALE_COLOR;
const data = fetch(DATA_URL).then((resp) => resp.json());

const layers = [
new ScatterplotLayer({
id: 'scatter-plot',
data,
radiusScale: radius,
radiusMinPixels: 0.25,
getPosition: (d) => [d[0], d[1], 0],
getFillColor: (d) => (d[2] === 1 ? maleColor : femaleColor),
getRadius: 1,
pickable: true,
updateTriggers: {
getFillColor: [maleColor, femaleColor],
},
}),
new SelectionLayer({
id: 'selection',
selectionType: 'rectangle',
onSelect: ({ pickingInfos }) => {},
layerIds: ['scatter-plot'],
getTentativeFillColor: () => [255, 0, 255, 100],
getTentativeLineColor: () => [0, 0, 255, 255],
getTentativeLineDashArray: () => [0, 0],
lineWidthMinPixels: 1,
}),
];

return (
<DeckGL initialViewState={initialViewState} controller={true} layers={layers}>
<StaticMap mapboxApiAccessToken={MAPBOX_ACCESS_TOKEN} />
</DeckGL>
);
};

Properties​

Inherits all deck.gl's Base Layer properties.

Also inherites some EditableGeoJsonLayer properties.

Note: do not pass a data property.

selectionType (String, required)​

  • Default: rectangle

rectangle or polygon; null disables selection.

onSelect (Function, required)​

Called when selection is completed with {pickingInfos}. Each entry is the original deck.gl picking info, including the selected object, source layer, and object index.

Both selection modes use deck.gl's WebGL GPU picking. Polygon selection masks pixels outside the drawn lasso, including for wide, diagonal, and concave lassos. Objects are selected when visible rendered pixels intersect the selection; overlapping objects hidden behind another object are not included. The layer does not scan target data or require a getPosition accessor.

layerIds (String[], required)​

Array of pickable layer IDs to search, including their sublayers. Place the SelectionLayer after its target layers in the deck layer list so its picking mask covers those layers. Layers must have pickable: true; hidden or fully occluded objects are not selected.