parent
2809953655
commit
435e952404
Binary file not shown.
@ -0,0 +1,84 @@
|
||||
import { scaleLinear } from 'd3-scale';
|
||||
import { interpolateViridis } from 'd3-scale-chromatic';
|
||||
import { DeckGL, GridCellLayer } from 'deck.gl';
|
||||
import 'maplibre-gl/dist/maplibre-gl.css';
|
||||
import Map from 'react-map-gl/maplibre';
|
||||
|
||||
import { asyncBufferFromUrl, parquetRead } from 'hyparquet';
|
||||
import { useState } from 'react';
|
||||
|
||||
let data: any
|
||||
await parquetRead({
|
||||
file: await asyncBufferFromUrl({ url: "./f.parquet" }),
|
||||
onComplete: d => data = d
|
||||
})
|
||||
|
||||
const grid = data.map(d => {
|
||||
return {
|
||||
id: d[0],
|
||||
x: d[1],
|
||||
y: d[2],
|
||||
}
|
||||
})
|
||||
|
||||
const colorScale = scaleLinear<string, string>().domain([0, 10]).range([interpolateViridis(0), interpolateViridis(1)]);
|
||||
|
||||
function App2() {
|
||||
const [clickedSquare, setClickedSquare] = useState(null);
|
||||
|
||||
const clickedData = clickedSquare && data.find(d => d[0] === clickedSquare.object.id);
|
||||
const clickedGrid = clickedSquare && clickedData[3].map((element: any, i: number) => {
|
||||
return {
|
||||
...grid.find(d => d.id === element),
|
||||
value: clickedData[4][i]
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
const layers = [
|
||||
new GridCellLayer({
|
||||
id: 'deckgl-grid',
|
||||
//@ts-ignore
|
||||
data: grid,
|
||||
getPosition: d => [d.x, d.y],
|
||||
getFillColor: [100, 100, 100, 100],
|
||||
//@ts-ignore
|
||||
cellSize: 505,
|
||||
extruded: false,
|
||||
pickable: true,
|
||||
autoHighlight: true,
|
||||
highlightColor: [0, 255, 0],
|
||||
onClick: info => setClickedSquare(info)
|
||||
}),
|
||||
new GridCellLayer({
|
||||
id: 'clicked-grid',
|
||||
//@ts-ignore
|
||||
data: clickedGrid,
|
||||
getPosition: d => [d.x, d.y],
|
||||
//@ts-ignore
|
||||
getFillColor: d => colorScale(Number(d.value)).slice(4, -1).split(", ").map(Number),
|
||||
cellSize: 505,
|
||||
extruded: false
|
||||
}),
|
||||
];
|
||||
|
||||
return (
|
||||
<>
|
||||
<DeckGL
|
||||
initialViewState={{
|
||||
longitude: 37.028,
|
||||
latitude: 55.778,
|
||||
zoom: 7
|
||||
}}
|
||||
controller
|
||||
layers={layers}
|
||||
getCursor={() => "crosshair"}
|
||||
>
|
||||
<Map mapStyle="https://basemaps.cartocdn.com/gl/positron-gl-style/style.json" hash={true} />
|
||||
</DeckGL>
|
||||
</>
|
||||
|
||||
);
|
||||
}
|
||||
|
||||
export default App2
|
||||
Loading…
Reference in new issue