全球场景和局部场景

字数统计: 844
阅读时长: 约 2 分钟
当前版本: 4.29

相同底图和要素图层在全球场景和局部场景下的对比

什么是全球场景和局部场景?

全球场景和局部场景是用于可视化 3D 数据的两种不同的查看模式。在使用场景时,可以选择是在全球上渲染数据,还是将数据投影到可在 3D 空间中导航的平面上展示。

全球场景通常用于显示跨越全球范围的数据,需要查看地球曲率时,非常重要。

局部场景是地表的投影视图,通常用于较小的范围。在可视化国家/地区或城市数据时,它非常有用。要仅显示感兴趣的区域,可以将局部场景裁剪到某个范围。

在全球场景和局部场景中,都可以显示地下数据,并在地下和地上进行漫游。

如何创建场景

创建全球场景或局部场景,先定义需要显示的底图图层和数据图层,然后设置照相机属性。

定义场景

第一步是创建具有底图图层和数据图层的场景。如果需要,还可以引用高程服务以显示带有地貌的场景。

js
 // In the GeoScene JS API, the Map class is used
 // to define both maps and scenes.
 const map = new Map({
    basemap: "tianditu-vector",
    ground: "world-elevation"
 });

设置相机位置

设置场景后,可通过定义场景视图的相机、指定相机的位置(包括高度)、方向和倾斜度(或俯仰)来设置场景视图的场景视角。

使用场景视图时可以指定查看模式是 local 还是 global

js
    const sceneView = new SceneView({
        map: map,
        camera: {
            position: [
                -41.18215285,
                -86.13467977,
                9321113.29449
            ],
            heading: 359.73,
            tilt: 68.57
        },
        viewingMode: "local",
        container: "view2Div"
    });

示例

创建全球场景

此示例显示了全球场景中的地震数据。该场景使用 Vintage Shaded Relief 图层作为底图。此外,地震数据图层作为 CSV 图层加载。在场景视图上设置了场景以及相机位置和全球查看模式。

js
const map = new Map({
    basemap: new Basemap({
    baseLayers: [
        new TileLayer({
            url: "https://tiles.arcgis.com/tiles/nGt4QxSblgDfeJn9/arcgis/rest/services/VintageShadedRelief/MapServer"
        })
    ]}),
    layers: [csvLayer]
 });

const view = new SceneView({
    container: "viewDiv",
    map: map,
    // Indicates to create a global scene
    viewingMode: "global",
    camera: {
        position: [
            -63.77153412,
            20.75790715,
            25512548.00000
        ],
        heading: 0.00,
        tilt: 0.10
    },
    constraints: {
        altitude: {
            min: 700000
        }
    },
    alphaCompositingEnabled: true,
    highlightOptions: {
        fillOpacity: 0,
        color: "#ffffff"
    },
    environment: {
        background: {
            type: "color",
            color: [0, 0, 0, 0]
        },
        atmosphere: null,
        starsEnabled: false
    }
});

创建局部场景

此示例在一个裁剪的局部场景中显示地震。场景视图显示底图和地震数据 (显示在地平面下方)。启用地下导航以探索地震。此外,该视图使用裁剪范围来仅显示感兴趣的区域。

js
    const map = new Map({
        basemap: "tianditu-vector",
        layers: [
            uakesDepthLayer
        ],
        ground: {
            navigationConstraint: {
                type: "none"
            },
            opacity: 0.8
        }
    });

    const view = new SceneView({
        container: "viewDiv",
        map: map,
        // Indicates to create a local scene
        viewingMode: "local",
        // Use the exent defined in clippingArea to define the bounds of the scene
        clippingArea: {
            xmax: -10834217,
            xmin: -10932882,
            ymax: 4493918,
            ymin: 4432667,
            spatialReference: {
                wkid: 3857
            }
        },
        camera: {
            position: [
              -98.36408160,
              36.42115060,
              26124.42603
            ],
            heading: 32.37,
            tilt: 78.08
        },

        // Turns off atmosphere and stars settings
        environment: {
            atmosphere: null,
            starsEnabled: false
        }
    });