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

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
- Create a
Sceneand add it to aSceneView. - Create a
RasterElevationSourcewith an array of raster file URLs. - Add the source to the scene’s base surface.
Relevant API
- RasterElevationSource
- Surface
Offline data
This sample uses the Monterey Elevation 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
// 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 ArcGISimport 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")! }}