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