Create terrain surface from a local raster

View inC++QMLView on GitHubSample viewer app

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

screenshot

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:

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

Tags

3D, Raster, Elevation, Surface

Sample Code

CreateTerrainSurfaceFromLocalRaster.qml
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
// [WriteFile Name=CreateTerrainSurfaceFromLocalRaster, Category=Scenes]
// [Legal]
// Copyright 2019 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
// http://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.
// [Legal]

import QtQuick
import Esri.ArcGISRuntime
import Esri.ArcGISExtras

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

    readonly property string montereyRasterElevationPath: {
        Qt.platform.os === "ios" ?
                    System.writableLocation(System.StandardPathsDocumentsLocation) + "/ArcGIS/Runtime/Data/raster/MontereyElevation.dt2" :
                    System.writableLocation(System.StandardPathsHomeLocation) + "/ArcGIS/Runtime/Data/raster/MontereyElevation.dt2"
    }

    SceneView {
        id: sceneView
        anchors.fill: parent

        Scene {
            id: scene
            Basemap {
                initStyle: Enums.BasemapStyleArcGISImageryStandard
            }

            Surface {
                RasterElevationSource{
                    // 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)
                }
            }
        }

        Component.onCompleted: {
            // Set the focus on SceneView to initially enable keyboard navigation
            forceActiveFocus();

            // Once the scene view has loaded, apply the camera.
            setViewpointCameraAndWait(camera);
        }
    }

    function reportLoadStatus(loadStatus, loadError){
        if(loadStatus === Enums.LoadStatusLoaded){
            console.info("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
    }
}

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