in examples/website/data-filter/app.js [76:140]
export default function App({data, mapStyle = 'mapbox://styles/mapbox/light-v9'}) {
const [filter, setFilter] = useState(null);
const timeRange = useMemo(() => getTimeRange(data), [data]);
const filterValue = filter || timeRange;
const layers = [
data &&
new ScatterplotLayer({
id: 'earthquakes',
data,
opacity: 0.8,
radiusScale: 100,
radiusMinPixels: 1,
wrapLongitude: true,
getPosition: d => [d.longitude, d.latitude, -d.depth * 1000],
getRadius: d => Math.pow(2, d.magnitude),
getFillColor: d => {
const r = Math.sqrt(Math.max(d.depth, 0));
return [255 - r * 15, r * 5, r * 10];
},
getFilterValue: d => d.timestamp,
filterRange: [filterValue[0], filterValue[1]],
filterSoftRange: [
filterValue[0] * 0.9 + filterValue[1] * 0.1,
filterValue[0] * 0.1 + filterValue[1] * 0.9
],
extensions: [dataFilter],
pickable: true
})
];
return (
<>
<DeckGL
views={MAP_VIEW}
layers={layers}
initialViewState={INITIAL_VIEW_STATE}
controller={true}
getTooltip={getTooltip}
>
<StaticMap
reuseMaps
mapStyle={mapStyle}
preventStyleDiffing={true}
mapboxApiAccessToken={MAPBOX_TOKEN}
/>
</DeckGL>
{timeRange && (
<RangeInput
min={timeRange[0]}
max={timeRange[1]}
value={filterValue}
animationSpeed={MS_PER_DAY * 30}
formatLabel={formatLabel}
onChange={setFilter}
/>
)}
</>
);
}