微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Deck.GL TerrainLayer 渲染其他 HTML 元素

如何解决Deck.GL TerrainLayer 渲染其他 HTML 元素

在使用 DeckGL + React 进行编码时,地形层图块呈现在所有其他 HTML 元素之上,无论 DOM 中指定的顺序如何。

在本例中,我希望能够在 <Graph> 中的地形图块顶部渲染 <DeckGLMap> 组件

*为简洁起见,示例已被编辑

import './App.css';
import './styles.css';
import React from 'react'
import DeckGL from '@deck.gl/react';
import {TerrainLayer} from '@deck.gl/geo-layers';
import {GeoJsonLayer} from '@deck.gl/layers';
  
class Wrapper extends React.Component {
  state = {
    focal_pt: "TEST",upstream: [],downstream: []
  }

  render() {
    return (
      <>
        <Graph focal_pt={this.state.focal_pt}/>
        <div className="map-container">
          <DeckGLMap/>
        </div>
      </>
    );
  }
}


class Graph extends React.Component {

  constructor(props) {
    super(props)
  }

    render () {
      return <div className="graph">{this.props.focal_pt ? this.props.focal_pt.lat: ''}</div>
    }
}

class DeckGLMap extends React.Component {
  constructor(props) {
    super(props)
  }

  baseTerrain = new TerrainLayer({
    id: 'terrain',minZoom: 0,maxZoom: 18,pickable: true,// onClick: (info,event) => console.log('Clicked:',info.coordinate),onClick: (info,event) => {
      this.props.newFoci({lon: info.coordinate[0],lat: info.coordinate[1]})
    },strategy: 'no-overlap',elevationDecoder: ELEVATION_DECODER,elevationData: TERRAIN_IMAGE,texture: SURFACE_IMAGE,meshMaxError: 2.0,wireframe: false,color: [0,0]
  })

  render() {
    return (
      <div className="map">
        <DeckGL 
              initialViewState={INITIAL_VIEW_STATE} 
              controller={true} 
              layers={[this.baseTerrain]}
      />
      </div>
    );
  }
}

function App() {
  return (
    <div className="App">
        <Wrapper />
    </div>
  );
}

export default App;

我尝试了 vDOM 中元素的多个层次结构/排序。有没有办法确保瓷砖按照预期的顺序加载?

解决方法

在这篇文章中找到了答案: Rendering NavigationControl with deck.gl

TL;DR:在任何 style={{zIndex: '1'}} 上设置 <divs>,您想在 DeckGL 上方渲染。适用于其他图层,而不仅仅是 TerrainLayer。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。