Skip to content

Display scene

View on GitHub

Display a scene with a terrain surface and some imagery.

Image of display scene

Use case

Scene views are 3D representations of real-world areas and objects. Scene views are helpful for visualizing complex datasets where 3D relationships, topography, and elevation of elements are important factors.

How to use the sample

When loaded, the sample will display a scene. Pan and zoom to explore the scene.

How it works

  1. Create an ArcGISScene object with the arcGISImageryStandard basemap style.
  2. Create an ArcGISTiledElevationSource and add it to the scene's base surface.
  3. Create a ArcGISSceneView and assign the map.
  4. Set the scene to the scene view.

Relevant API

  • ArcGISScene
  • ArcGISTiledElevationSource
  • SceneView

Tags

3D, basemap, elevation, scene, surface

Sample Code

display_scene.dart
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
// Copyright 2025 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 'package:arcgis_maps/arcgis_maps.dart';
import 'package:arcgis_maps_sdk_flutter_samples/common/common.dart';
import 'package:flutter/material.dart';

class DisplayScene extends StatefulWidget {
  const DisplayScene({super.key});

  @override
  State<DisplayScene> createState() => _DisplaySceneState();
}

class _DisplaySceneState extends State<DisplayScene> with SampleStateSupport {
  // Create a controller for the scene view.
  final _sceneViewController = ArcGISSceneView.createController();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: ArcGISSceneView(
        controllerProvider: () => _sceneViewController,
        onSceneViewReady: onSceneViewReady,
      ),
    );
  }

  Future<void> onSceneViewReady() async {
    // Create a scene with the imagery standard basemap style.
    final scene = ArcGISScene.withBasemapStyle(
      BasemapStyle.arcGISImageryStandard,
    );

    // Add scene (with an imagery basemap) to the scene view's scene property.
    _sceneViewController.arcGISScene = scene;

    // Create an ArcGIS tiled elevation.
    final arcGISTiledElevationSource = ArcGISTiledElevationSource.withUri(
      Uri.parse(
        'https://elevation3d.arcgis.com/arcgis/rest/services/WorldElevation3D/Terrain3D/ImageServer',
      ),
    );

    // Add the ArcGIS tiled elevation source to the surface's elevated sources collection.
    scene.baseSurface.elevationSources.add(arcGISTiledElevationSource);

    // Create camera with an initial camera position (Mount Everest in the Alps mountains).
    final camera = Camera.withLatLong(
      latitude: 45.74,
      longitude: 6.88,
      altitude: 4500,
      heading: 10,
      pitch: 70,
      roll: 0,
    );

    // Set the scene view's camera position.
    await _sceneViewController.setViewpointCameraAnimated(camera: camera);
  }
}

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