Add elevation source from raster

View on GitHub

Set the terrain surface with elevation described by a raster file.

Screenshot of Add elevation source from raster sample

Use case

In a scene view, the terrain surface is what the basemap, operational layers, and graphics are draped onto. For example, when viewing a scene in a mountainous region, applying a terrain surface to the scene will help in recognizing the slopes, valleys, and elevated areas.

How to use the sample

When opened, the sample displays a scene with a terrain surface applied. Pan and zoom to explore the scene and observe how the terrain surface allows visualizing elevation differences.

How it works

  1. Create a Scene and add it to a SceneView.
  2. Create a RasterElevationSource with an array of raster file URLs.
  3. Add the source to the scene's base surface.

Relevant API

  • RasterElevationSource
  • Surface

Offline data

This sample uses the MontereyElevation raster. It is downloaded from ArcGIS Online automatically.

Additional information

Supported raster formats include:

  • ASRP/USRP
  • CIB1, 5, 10
  • DTED0, 1, 2
  • GeoTIFF
  • HFA
  • HRE
  • IMG
  • JPEG
  • JPEG 2000
  • NITF
  • PNG
  • RPF
  • SRTM1, 2

Tags

3D, elevation, raster, surface, terrain

Sample Code

AddElevationSourceFromRasterView.swift
Use dark colors for code blocksCopy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
// Copyright 2024 Esri
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//   https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

import ArcGIS
import SwiftUI

struct AddElevationSourceFromRasterView: View {
    /// A scene with elevation for Monterey, California.
    @State private var scene: ArcGIS.Scene = {
        let scene = Scene(basemapStyle: .arcGISImagery)

        // Creates the raster elevation source using a URL.
        let rasterElevationSource = RasterElevationSource(fileURLs: [.montereyElevation])

        // Creates a surface to add the elevation source to the scene.
        let surface = Surface()
        surface.addElevationSource(rasterElevationSource)
        scene.baseSurface = surface

        // Sets the scene's initial camera to showcase the elevation.
        let camera = Camera(
            latitude: 36.525,
            longitude: -121.8,
            altitude: 300,
            heading: 180,
            pitch: 80,
            roll: 0
        )
        let viewpoint = Viewpoint(latitude: .nan, longitude: .nan, scale: .nan, camera: camera)
        scene.initialViewpoint = viewpoint

        return scene
    }()

    var body: some View {
        // Displays the scene in a scene view.
        SceneView(scene: scene)
    }
}

private extension URL {
    /// The URL to the local DTED2 Raster file with elevation for Monterey, California.
    static var montereyElevation: URL {
        Bundle.main.url(forResource: "MontereyElevation", withExtension: "dt2")!
    }
}

Your browser is no longer supported. Please upgrade your browser for the best experience. See our browser deprecation post for more details.