我在deck.gl 中遇到了僵局,希望你们能帮助我。我无法理解您如何在deck.gl官方网页中显示的hexagonLayer示例中显示条形的属性:https ://uber.github.io/deck.gl/#/examples/core -层/六边形层。GitHub 中提供的示例没有此功能,而且浏览器层对我来说太复杂了。我尝试合并嵌入在 layer-browser 示例中的 layer-info 组件,但我不明白什么是 (info),并且我不断收到此错误:
“模块解析失败:您可能需要适当的加载程序来处理此文件类型。
非常感谢您的宝贵时间!我是新手反应!如果这是微不足道的,我很抱歉。
应用程序.js
import React, {Component} from 'react';
import {render} from 'react-dom';
import MapGL from 'react-map-gl';
import DeckGLOverlay from './deckgl-overlay.js';
import Controls from './components/controls';
import {csv as requestCsv} from 'd3-request';
import LayerInfo from './components/layer-info';
// Set your mapbox token here
const MAPBOX_TOKEN =MBToken
// Source data CSV
const DATA_URL =
'https://raw.githubusercontent.com/uber-common/deck.gl-data/master/examples/3d-heatmap/heatmap-data.csv'; // eslint-disable-line
class Root extends Component {
constructor(props) {
super(props);
this.state = {
datad: {
package: 'react-dat-gui',
radius: 1100,
isAwesome: true,
feelsLike: '#2FA1D6',
},
viewport: {
...DeckGLOverlay.defaultViewport,
width: 500,
height: 500
},
data: null,
hoveredItem: null,
clickedItem: null,
queriedItems: null
};
requestCsv(DATA_URL, (error, response) => {
if (!error) {
const data = response.map(d => [Number(d.lng), Number(d.lat)]);
this.setState({data});
}
});
}
componentDidMount() {
window.addEventListener('resize', this._resize.bind(this));
this._resize();
}
_resize() {
this._onViewportChange({
width: window.innerWidth,
height: window.innerHeight
});
}
_onViewportChange(viewport) {
this.setState({
viewport: {...this.state.viewport, ...viewport}
});
}
onParentUpdate(datad) {
this.setState({ datad });
}
onHover(info) {
this.setState({hoveredItem: info});
}
render() {
const {viewport, datad, data} = this.state;
return (
<div>
<MapGL
{...viewport}
mapStyle="mapbox://styles/mapbox/dark-v9"
onViewportChange={this._onViewportChange.bind(this)}
mapboxApiAccessToken={MAPBOX_TOKEN}
>
<DeckGLOverlay viewport={viewport}
data={data || [] }
datad = {this.state.datad }
onLayerHover= {this.onHover}
/>
</MapGL>
<Controls
onUpdate = {(datad) => this.onParentUpdate(datad)}
datad = {this.state.datad}
/>
<LayerInfo
hovered={hoveredItem}
/>
</div>
);
}
}
render(<Root />, document.body.appendChild(document.createElement('div')));
层信息.js
import React, {PureComponent} from 'react';
export default class LayerInfo extends PureComponent {
_infoToString(info) {
const object = info.feature || info.object;
if (!object) {
return 'None';
}
const props = object.properties || object;
return JSON.stringify(props);
}
render() {
const {hovered, clicked, queried} = this.props;
return (
<div>
{hovered && (
<div>
<h4>Hover</h4>
<span>
Layer: {hovered.layer.id} Object: {this._infoToString(hovered)}
</span>
</div>
)}
</div>
);
}
}
甲板gl-overlay.js
import React, {Component} from 'react';
import {render} from 'react-dom';
import MapGL from 'react-map-gl';
import DeckGLOverlay from './deckgl-overlay.js';
import Controls from './components/controls';
import {csv as requestCsv} from 'd3-request';
import LayerInfo from './components/layer-info';
// Set your mapbox token here
const MAPBOX_TOKEN = MBToken; // eslint-disable-line
// Source data CSV
const DATA_URL =
'https://raw.githubusercontent.com/uber-common/deck.gl-data/master/examples/3d-heatmap/heatmap-data.csv'; // eslint-disable-line
class Root extends Component {
constructor(props) {
super(props);
this.state = {
datad: {
package: 'react-dat-gui',
radius: 1100,
isAwesome: true,
feelsLike: '#2FA1D6',
},
viewport: {
...DeckGLOverlay.defaultViewport,
width: 500,
height: 500
},
data: null,
hoveredItem: null,
clickedItem: null,
queriedItems: null
};
requestCsv(DATA_URL, (error, response) => {
if (!error) {
const data = response.map(d => [Number(d.lng), Number(d.lat)]);
this.setState({data});
}
});
}
componentDidMount() {
window.addEventListener('resize', this._resize.bind(this));
this._resize();
}
_resize() {
this._onViewportChange({
width: window.innerWidth,
height: window.innerHeight
});
}
_onViewportChange(viewport) {
this.setState({
viewport: {...this.state.viewport, ...viewport}
});
}
onParentUpdate(datad) {
this.setState({ datad });
}
onHover(info) {
this.setState({hoveredItem: info});
}
render() {
const {viewport, datad, data} = this.state;
return (
<div>
<MapGL
{...viewport}
mapStyle="mapbox://styles/mapbox/dark-v9"
onViewportChange={this._onViewportChange.bind(this)}
mapboxApiAccessToken={MAPBOX_TOKEN}
>
<DeckGLOverlay viewport={viewport}
data={data || [] }
datad = {this.state.datad }
onLayerHover= {this.onHover}
/>
</MapGL>
<Controls
onUpdate = {(datad) => this.onParentUpdate(datad)}
datad = {this.state.datad}
/>
<LayerInfo
hovered={hoveredItem}
/>
</div>
);
}
}
render(<Root />, document.body.appendChild(document.createElement('div')));
更新:我现在收到另一个错误“未捕获的 ReferenceError:未定义悬停项”