0

我只是想知道是否有人可以提供在 Deck.gl 中使用的地球仪的示例,它是实际的地球仪还是只是视图。因为我希望能够查看地球仪,所以我做了一个小的尝试来使用它,但这给我留下了一张静态地图作为背景,而全球视图则放在了顶部,这不是我想要的。

4

1 回答 1

0

我在deck.gl 站点上找到了全球视图的示例,我已经更改了代码以利用React,这似乎工作得很好。

import React from 'react'
import {Deck, _GlobeView as GlobeView} from '@deck.gl/core';
import {SolidPolygonLayer, GeoJsonLayer, ArcLayer} from '@deck.gl/layers';
import { DeckGL } from 'deck.gl';

// source: Natural Earth http://www.naturalearthdata.com/ via geojson.xyz
const COUNTRIES =
  'https://d2ad6b4ur7yvpq.cloudfront.net/naturalearth-3.3.0/ne_50m_admin_0_scale_rank.geojson'; //eslint-disable-line
const AIR_PORTS =
  'https://d2ad6b4ur7yvpq.cloudfront.net/naturalearth-3.3.0/ne_10m_airports.geojson';

const INITIAL_VIEW_STATE = {
  latitude: 50,
  longitude: 50,
  zoom: 0
};

export function Globe() {

    return (
        <DeckGL 
            views={ new GlobeView()}
            initialViewState={INITIAL_VIEW_STATE}
            controller={true}
            layers= {[
                // A GeoJSON polygon that covers the entire earth
                // See /docs/api-reference/globe-view.md#remarks
                new SolidPolygonLayer({
                    id: 'background',
                    data: [
                        // prettier-ignore
                        [[-180, 90], [0, 90], [180, 90], [180, -90], [0, -90], [-180, -90]]
                    ],
                    opacity: 0.5,
                    getPolygon: d => d,
                    stroked: false,
                    filled: true,
                    getFillColor: [32, 201, 218]
                }),
                new GeoJsonLayer({
                    id: 'base-map',
                    data: COUNTRIES,
                    // Styles
                    stroked: true,
                    filled: true,
                    lineWidthMinPixels: 2,
                    getLineColor: [35, 107, 19],
                    getFillColor: [41, 156, 22]
                }),
                new GeoJsonLayer({
                    id: 'airports',
                    data: AIR_PORTS,
                    // Styles
                    filled: true,
                    pointRadiusMinPixels: 2,
                    pointRadiusScale: 2000,
                    getRadius: f => 11 - f.properties.scalerank,
                    getFillColor: [200, 0, 80, 180],
                    // Interactive props
                    pickable: true,
                    autoHighlight: true,
                    onClick: info =>
                        // eslint-disable-next-line
                        info.object && alert(`${info.object.properties.name} (${info.object.properties.abbrev})`)
                }),
                new ArcLayer({
                    id: 'arcs',
                    data: AIR_PORTS,
                    dataTransform: d => d.features.filter(f => f.properties.scalerank < 4),
                    // Styles
                    getSourcePosition: f => [-0.4531566, 51.4709959], // London
                    getTargetPosition: f => f.geometry.coordinates,
                    getSourceColor: [0, 128, 200],
                    getTargetColor: [200, 0, 80],
                    getWidth: 1
                })
            ]}
        />   
    )
}
于 2020-08-21T17:02:15.407 回答