如何在 DeckGL 中找到所有 Mapbox 图层?
How to find all Mapbox layers in DeckGL?
我正在关注 this 将 Mapbox 标签放在图层顶部的示例。这似乎是使用普通的 Mapbox 包编写的。我希望对 DeckGL 中的地图组件做同样的事情。
示例中的相关代码:
const map = new mapboxgl.Map({
container: document.body,
style: 'mapbox://styles/mapbox/light-v9',
center: [-122.4, 37.79],
zoom: 15,
pitch: 60
});
map.on('load', () => {
const firstLabelLayerId = map.getStyle().layers.find(layer => layer.type === 'symbol').id;
我使用 DeckGL 的代码是:
<DeckGL
initialViewState={INITIAL_VIEW_STATE}
layers={layers}
onClick={expandTooltip}
onViewStateChange={hideTooltip}
onWebGLInitialized={onInitialized}
views={MAP_VIEW}
controller={{
touchRotate: true,
inertia: 600,
}}
>
<StaticMap
reuseMaps
mapStyle={MAP_STYLE}
preventStyleDiffing={true}
mapboxApiAccessToken={process.env.REACT_APP_MAPBOX_TOKEN}
/>
</DeckGL>
如何访问上述组件中的 getStyle().layers
?我尝试使用 useRef
,就像在这个简化的组件中一样:
const mapRef = useRef();
<DeckGL
{...viewport}
maxZoom={20}
mapboxApiAccessToken={process.env.REACT_APP_MAPBOX_TOKEN}
ref={mapRef}
>
但发现它不包含有关该组件的信息。
您需要等到 mapLoad
秒,例如:
1 - 定义一个新的 ref
:
const mapRef = useRef();
2 - 等待地图加载:
<StaticMap
ref={mapRef}
onLoad={onMapLoad}
...otherProps
/>
3 - 使用 getMap
方法。现在我们确定 Mapbox 实例存在:
const onMapLoad = useCallback(() => {
const map = mapRef.current.getMap();
const mapboxLayers = map.getStyle().layers;
console.log(mapboxLayers);
}, []);
地图加载到浏览器后,您必须使用 deckg
l 图层。为此,您可以使用:
Map.on('load', callback function)
更多参考使用这个https://youtu.be/x6UcMcAWNMo
我正在关注 this 将 Mapbox 标签放在图层顶部的示例。这似乎是使用普通的 Mapbox 包编写的。我希望对 DeckGL 中的地图组件做同样的事情。
示例中的相关代码:
const map = new mapboxgl.Map({
container: document.body,
style: 'mapbox://styles/mapbox/light-v9',
center: [-122.4, 37.79],
zoom: 15,
pitch: 60
});
map.on('load', () => {
const firstLabelLayerId = map.getStyle().layers.find(layer => layer.type === 'symbol').id;
我使用 DeckGL 的代码是:
<DeckGL
initialViewState={INITIAL_VIEW_STATE}
layers={layers}
onClick={expandTooltip}
onViewStateChange={hideTooltip}
onWebGLInitialized={onInitialized}
views={MAP_VIEW}
controller={{
touchRotate: true,
inertia: 600,
}}
>
<StaticMap
reuseMaps
mapStyle={MAP_STYLE}
preventStyleDiffing={true}
mapboxApiAccessToken={process.env.REACT_APP_MAPBOX_TOKEN}
/>
</DeckGL>
如何访问上述组件中的 getStyle().layers
?我尝试使用 useRef
,就像在这个简化的组件中一样:
const mapRef = useRef();
<DeckGL
{...viewport}
maxZoom={20}
mapboxApiAccessToken={process.env.REACT_APP_MAPBOX_TOKEN}
ref={mapRef}
>
但发现它不包含有关该组件的信息。
您需要等到 mapLoad
秒,例如:
1 - 定义一个新的 ref
:
const mapRef = useRef();
2 - 等待地图加载:
<StaticMap
ref={mapRef}
onLoad={onMapLoad}
...otherProps
/>
3 - 使用 getMap
方法。现在我们确定 Mapbox 实例存在:
const onMapLoad = useCallback(() => {
const map = mapRef.current.getMap();
const mapboxLayers = map.getStyle().layers;
console.log(mapboxLayers);
}, []);
地图加载到浏览器后,您必须使用 deckg
l 图层。为此,您可以使用:
Map.on('load', callback function)
更多参考使用这个https://youtu.be/x6UcMcAWNMo