Skip To Content ArcGIS for Developers Sign In Dashboard

ArcGIS Runtime SDK for Qt

Create terrain surface from a local raster

Sample Viewer View Sample on GitHub

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 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

  1. Create a Scene and add it to a SceneView.
  2. Create a RasterElevationSource with a list of local raster file paths, in this case a single .dt2 file
  3. Add the raster elevation source to the scene's base surface.

Relevant API

  • RasterElevationSource
  • Surface

Offline data

Read more about how to set up the sample's offline data here.

Link Local Location
MontereyElevation Raster <userhome>/ArcGIS/Runtime/Data/raster/MontereyElevation.dt2

Additional information

Supported raster formats include:

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


3D, Raster, Elevation, Surface

Sample Code

import QtQuick 2.6
import Esri.ArcGISRuntime 100.9
import Esri.ArcGISExtras 1.1

Rectangle {
    id: rootRectangle
    clip: true
    width: 800
    height: 600

    readonly property string montereyRasterElevationPath: System.userHomePath + "/ArcGIS/Runtime/Data/raster/MontereyElevation.dt2"

    SceneView {
        id: sceneView
        anchors.fill: parent

        Scene {
            id: scene
            BasemapImagery {}

            Surface {
                    // RasterElevationSource takes a list of raster files. Here we provide a list cotaining just a single file.
                    fileUrls: [montereyRasterElevationPath]
                    // Hook up success/error reporting for the Elevation Source load
                    onLoadStatusChanged: reportLoadStatus(loadStatus, loadError)

        // Once the scene view has loaded, apply the camera.
        Component.onCompleted: {

    function reportLoadStatus(loadStatus, loadError){
        if(loadStatus === Enums.LoadStatusLoaded){
  "Loaded raster elevation source succesfully");
        else if(loadStatus === Enums.LoadStatusFailedToLoad){
            console.warn("Error loading elevation source : ", loadError.message, loadError.additionalMessage);

    // Create the camera to be used as the scene view's viewpoint, looking at Monterey, California..
    Camera {
        id: camera
        location: Point {
            x: -121.80 // Longitude
            y: 36.51 // Latitude
            z: 300.0 // Altiude
            spatialReference: SpatialReference { wkid: 4326 }
        heading: 10.0
        pitch: 70.0
        roll: 0.0