【问题标题】:How do I get deck.gl and react-map-gl to display correctly?如何让 deck.gl 和 react-map-gl 正确显示?
【发布时间】:2021-09-14 14:43:39
【问题描述】:

Here is a code sandbox example 我试图在特定组件内显示地图。但是,我无法让 deck.gl 和 react-map-gl div 存在于它们的父级中。相反,它们会溢出到文档正文的范围内。

例子的基本布局是:

        <Box id='mapcontainer'>
            <DeckGL id="deck-gl">
                <MapView id="map"  >
                    <StaticMap/>
                </MapView>
            </DeckGL>
        </Box>

Deck.gl 似乎在 &lt;Box id='mapcontainer'&gt; div 和 &lt;DeckGL id='deck-gl'&gt; div 之间创建了一个 &lt;div&gt; 和一个 &lt;canvas&gt; 元素,我无法让 div 和 canvas 位于它们的父 Box 中.

&lt;div&gt;&lt;canvas&gt; 中的 id 似乎是分别从传递给 DeckGL 组件的 ID 创建的,id="deck-gl-wrapper"id="deck-gl"。其中"deck-gl" 是我传递给&lt;deckGL&gt; 组件的id

这可能是也可能不是实际问题,但在 devtools 中使用元素检查器是我目前最好的猜测。

谁能帮我弄清楚为什么 deck.gl 和 react-map-gl 组件不在其父级范围内?即使我在DeckGL 组件中设置了parent 和/或canvas 属性?

文档链接:
react-map-gl
deck.gl

上面链接的代码框中包含一个功能示例。我已经包含了许多我作为 cmets 尝试过的东西,但到目前为止还没有运气。

https://codesandbox.io/s/deck-gl-and-mui-react-e3t23?file=/src/App.js

谢谢...

对于本地快速参考,app.js 文件如下所示。

import Box from "@material-ui/core/Box";
import DeckGL from "@deck.gl/react";
import { MapView } from "@deck.gl/core";
import { LineLayer } from "@deck.gl/layers";
import { StaticMap } from "react-map-gl";

const MAPBOX_ACCESS_TOKEN = <tokenInCodeSandboxIfYouNeedIt>

const INITIAL_VIEW_STATE = {
    longitude: -122.41669,
    latitude: 37.7853,
    zoom: 13,
    pitch: 0,
    bearing: 0
};

const data = [
    {
        sourcePosition: [-122.41669, 37.7853],
        targetPosition: [-122.41669, 37.781]
    }
];

function App() {
    return (
        <Box
            id='mapcontainer'
            sx={{
                border: 1,
                height: 450,
                width: "auto",
                m: 5
            }}
        >
            <DeckGL
                initialViewState={INITIAL_VIEW_STATE}
                controller={true}
                id="deck-gl"
            >
                <LineLayer id="line-layer" data={data} />
                <MapView
                    id="map"
                    controller={false}
                >
                    <StaticMap
                        mapStyle="mapbox://styles/mapbox/dark-v9"
                        mapboxApiAccessToken={MAPBOX_ACCESS_TOKEN} 
                    />
                </MapView>
            </DeckGL>
        </Box>
    );
}

export default App;

【问题讨论】:

    标签: html css reactjs deck.gl react-map-gl


    【解决方案1】:

    为了让deck.gl 组件占用父组件的可用空间,您可以将position: 'relative' 添加到您的Box 的覆盖中,ID 为mapcontainer。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-30
      • 1970-01-01
      • 2022-08-18
      • 2022-01-22
      • 2021-08-18
      • 1970-01-01
      • 2019-10-17
      • 2022-12-07
      相关资源
      最近更新 更多