Set the terrain surface with elevation described by a local tile package.
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 loaded, the sample will show 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
Scene
and add it to aSceneView
. - Create an
ArcGISTiledElevationSource
with the path to the local tile package. - Add the source to the scene's base surface.
Relevant API
- ArcGISTiledElevationSource
- Surface
Offline data
This sample uses the Monterey Elevation tile package, using CompactV2 storage format (.tpkx). It is downloaded from ArcGIS Online automatically.
Additional information
The tile package must be a LERC (limited error raster compression) encoded TPK/TPKX. Details on the topic can be found in Share a tile package in the ArcGIS Pro documentation.
Tags
3D, elevation, LERC, surface, terrain, tile cache
Sample Code
// 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 AddElevationSourceFromTilePackageView: View {
/// A scene with elevation for Monterey, California.
@State private var scene: ArcGIS.Scene = {
let scene = Scene(basemapStyle: .arcGISImagery)
// Creates the tiled elevation source using a URL.
let rasterElevationSource = ArcGISTiledElevationSource(url: .montereyElevationTilePackage)
// 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 tile package file with elevation data for Monterey, California.
static var montereyElevationTilePackage: URL {
Bundle.main.url(forResource: "MontereyElevation", withExtension: "tpkx")!
}
}