From 7de1ee7fa7c47a0f6c7fcdea3934fa955f6dceb7 Mon Sep 17 00:00:00 2001 From: Chris Gervang Date: Tue, 27 Feb 2024 15:37:13 -0800 Subject: [PATCH 1/5] chore(examples) Use MapboxOverlay in safegraph example Signed-off-by: Chris Gervang --- examples/website/safegraph/app.js | 37 +++++++++++++++---------- examples/website/safegraph/package.json | 2 +- 2 files changed, 24 insertions(+), 15 deletions(-) diff --git a/examples/website/safegraph/app.js b/examples/website/safegraph/app.js index 4a3511123e3..b2e0739fa5e 100644 --- a/examples/website/safegraph/app.js +++ b/examples/website/safegraph/app.js @@ -1,5 +1,5 @@ import mapboxgl from 'mapbox-gl'; -import {MapboxLayer} from '@deck.gl/mapbox'; +import {MapboxOverlay as DeckOverlay} from '@deck.gl/mapbox'; import {ArcLayer} from '@deck.gl/layers'; import {H3HexagonLayer} from '@deck.gl/geo-layers'; import {scaleLog} from 'd3-scale'; @@ -32,6 +32,10 @@ export function renderToDOM(container, data) { pitch: 60 }); + const deckOverlay = new DeckOverlay({ + interleaved: true + }) + map.addControl(new mapboxgl.NavigationControl(), 'top-left'); map.on('load', () => { @@ -48,26 +52,27 @@ export function renderToDOM(container, data) { } }); - renderLayers(map, data); + renderLayers(map, deckOverlay, data); }); + map.addControl(deckOverlay) + return { - update: newData => renderLayers(map, newData), + update: newData => renderLayers(map, deckOverlay, newData), remove: () => { map.remove(); } }; } -function renderLayers(map, data) { +function renderLayers(map, deckOverlay, data) { if (!data) { return; } let selectedPOICentroid; - const arcLayer = new MapboxLayer({ + const arcLayer = new ArcLayer({ id: 'deckgl-connections', - type: ArcLayer, data: [], getSourcePosition: d => selectedPOICentroid, getTargetPosition: d => [d.home_lng, d.home_lat], @@ -79,14 +84,18 @@ function renderLayers(map, data) { const selectPOI = hex => { const [lat, lng] = cellToLatLng(hex); selectedPOICentroid = [lng, lat]; - arcLayer.setProps({ - data: data.filter(d => d.hex === hex) - }); + deckOverlay.setProps({ + layers: [ + poiLayer, // TODO: This was written with an imperative pattern, which won't work for MapboxOverlay. poiLayer needs to be defined. + arcLayer.clone({ + data: data.filter(d => d.hex === hex) + }) + ] + }) }; - const poiLayer = new MapboxLayer({ + const poiLayer = new H3HexagonLayer({ id: 'deckgl-pois', - type: H3HexagonLayer, data: aggregateHexes(data), opacity: 0.4, pickable: true, @@ -95,11 +104,11 @@ function renderLayers(map, data) { getHexagon: d => d.hex, getFillColor: d => colorScale(d.count), extruded: false, - stroked: false + stroked: false, + beforeId: getFirstLabelLayerId(map.getStyle()) }); - map.addLayer(poiLayer, getFirstLabelLayerId(map.getStyle())); - map.addLayer(arcLayer); + deckOverlay.setProps({ layers: [poiLayer, arcLayer]}) selectPOI('8a283082aa17fff'); } diff --git a/examples/website/safegraph/package.json b/examples/website/safegraph/package.json index 7a542b50a74..001ccfb5335 100644 --- a/examples/website/safegraph/package.json +++ b/examples/website/safegraph/package.json @@ -11,7 +11,7 @@ "dependencies": { "@loaders.gl/csv": "^4.1.0", "d3-scale": "^2.0.0", - "deck.gl": "^9.0.0-alpha", + "deck.gl": "^9.0.0-beta", "mapbox-gl": "^2.0.0" }, "devDependencies": { From 5e2b626f518f8d7c5d7d2bb1e727455fe61f5628 Mon Sep 17 00:00:00 2001 From: Chris Gervang Date: Thu, 29 Feb 2024 15:25:58 -0800 Subject: [PATCH 2/5] restore arc layer Signed-off-by: Chris Gervang --- examples/website/safegraph/app.js | 26 ++++++------------------- examples/website/safegraph/package.json | 2 +- 2 files changed, 7 insertions(+), 21 deletions(-) diff --git a/examples/website/safegraph/app.js b/examples/website/safegraph/app.js index b2e0739fa5e..3003beb5914 100644 --- a/examples/website/safegraph/app.js +++ b/examples/website/safegraph/app.js @@ -52,7 +52,7 @@ export function renderToDOM(container, data) { } }); - renderLayers(map, deckOverlay, data); + renderLayers(map, deckOverlay, data, '8a283082aa17fff'); }); map.addControl(deckOverlay) @@ -65,15 +65,16 @@ export function renderToDOM(container, data) { }; } -function renderLayers(map, deckOverlay, data) { +function renderLayers(map, deckOverlay, data, selectedPOI) { if (!data) { return; } - let selectedPOICentroid; + const [lat, lng] = cellToLatLng(selectedPOI); + let selectedPOICentroid = [lng, lat]; const arcLayer = new ArcLayer({ id: 'deckgl-connections', - data: [], + data: data.filter(d => d.hex === selectedPOI), getSourcePosition: d => selectedPOICentroid, getTargetPosition: d => [d.home_lng, d.home_lat], getSourceColor: [255, 0, 128], @@ -81,26 +82,13 @@ function renderLayers(map, deckOverlay, data) { getWidth: d => Math.max(2, d.count / 15) }); - const selectPOI = hex => { - const [lat, lng] = cellToLatLng(hex); - selectedPOICentroid = [lng, lat]; - deckOverlay.setProps({ - layers: [ - poiLayer, // TODO: This was written with an imperative pattern, which won't work for MapboxOverlay. poiLayer needs to be defined. - arcLayer.clone({ - data: data.filter(d => d.hex === hex) - }) - ] - }) - }; - const poiLayer = new H3HexagonLayer({ id: 'deckgl-pois', data: aggregateHexes(data), opacity: 0.4, pickable: true, autoHighlight: true, - onClick: ({object}) => object && selectPOI(object.hex), + onClick: ({object}) => object && renderLayers(map, deckOverlay, data, object.hex), getHexagon: d => d.hex, getFillColor: d => colorScale(d.count), extruded: false, @@ -109,8 +97,6 @@ function renderLayers(map, deckOverlay, data) { }); deckOverlay.setProps({ layers: [poiLayer, arcLayer]}) - - selectPOI('8a283082aa17fff'); } function aggregateHexes(data) { diff --git a/examples/website/safegraph/package.json b/examples/website/safegraph/package.json index 001ccfb5335..2a60e7fcd73 100644 --- a/examples/website/safegraph/package.json +++ b/examples/website/safegraph/package.json @@ -12,7 +12,7 @@ "@loaders.gl/csv": "^4.1.0", "d3-scale": "^2.0.0", "deck.gl": "^9.0.0-beta", - "mapbox-gl": "^2.0.0" + "mapbox-gl": "^3.0.0" }, "devDependencies": { "typescript": "^4.6.0", From a83529f3bc26700d7a71f66a4672dbc9f9737c4d Mon Sep 17 00:00:00 2001 From: Chris Gervang Date: Thu, 29 Feb 2024 16:17:21 -0800 Subject: [PATCH 3/5] mapbox css Signed-off-by: Chris Gervang --- examples/website/safegraph/app.js | 3 ++- examples/website/safegraph/index.html | 1 - 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/website/safegraph/app.js b/examples/website/safegraph/app.js index 3003beb5914..531d243af2a 100644 --- a/examples/website/safegraph/app.js +++ b/examples/website/safegraph/app.js @@ -1,4 +1,5 @@ import mapboxgl from 'mapbox-gl'; +import 'mapbox-gl/dist/mapbox-gl.css'; import {MapboxOverlay as DeckOverlay} from '@deck.gl/mapbox'; import {ArcLayer} from '@deck.gl/layers'; import {H3HexagonLayer} from '@deck.gl/geo-layers'; @@ -96,7 +97,7 @@ function renderLayers(map, deckOverlay, data, selectedPOI) { beforeId: getFirstLabelLayerId(map.getStyle()) }); - deckOverlay.setProps({ layers: [poiLayer, arcLayer]}) + deckOverlay.setProps({ layers: [poiLayer, arcLayer] }) } function aggregateHexes(data) { diff --git a/examples/website/safegraph/index.html b/examples/website/safegraph/index.html index 535927f05fd..1e2429880a0 100644 --- a/examples/website/safegraph/index.html +++ b/examples/website/safegraph/index.html @@ -3,7 +3,6 @@ mapbox-custom-layer-example -