Display an ArcGIS scene layer from a URL.
      
   
    
Use case
Adding a scene layer from a URL allows you to author the scene layer elsewhere in the platform, say with ArcGIS Pro or CityEngine, and then add that scene layer to a scene in Runtime. Loading a scene layer from a URL also permits the layer source to change dynamically without updating the code.
How to use the sample
Pan and zoom to explore the scene.
How it works
- Create an AGSScenewith a topographic basemap.
- Apply the scene to an AGSSceneView.
- Create an AGSArcGISTiledElevationSourcewith a URL and add it to anAGSSurface.
- Apply the surface to the scene.
- Create an AGSArcGISSceneLayerwith a URL and add it to the scene'soperationalLayersarray.
Relevant API
- AGSArcGISSceneLayer
- AGSScene
- AGSSceneView
About the data
This sample shows a Brest, France Scene hosted on ArcGIS Online.
Tags
3D, buildings, model, scene, service, URL
Sample Code
SceneLayerURLViewController.swift
//
// Copyright 2017 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.
//
import UIKit
import ArcGIS
class SceneLayerURLViewController: UIViewController {
    @IBOutlet var sceneView: AGSSceneView!
    override func viewDidLoad() {
        super.viewDidLoad()
        // add the source code button item to the right of navigation bar
        (self.navigationItem.rightBarButtonItem as! SourceCodeBarButtonItem).filenames = ["SceneLayerURLViewController"]
        // Initialize scene with topographic basemap style.
        let scene = AGSScene(basemapStyle: .arcGISTopographic)
        // assign scene to the scene view
        self.sceneView.scene = scene
        // set the viewpoint camera
        let point = AGSPoint(x: -4.49779155626782, y: 48.38282454039932, z: 62.013264927081764, spatialReference: .wgs84())
        let camera = AGSCamera(location: point, heading: 41.64729875588979, pitch: 71.2017391571523, roll: 0)
        self.sceneView.setViewpointCamera(camera)
        // add base surface for elevation data
        let surface = AGSSurface()
        /// The url of the Terrain 3D ArcGIS REST Service.
        let worldElevationServiceURL = URL(string: "https://elevation3d.arcgis.com/arcgis/rest/services/WorldElevation3D/Terrain3D/ImageServer")!
        let elevationSource = AGSArcGISTiledElevationSource(url: worldElevationServiceURL)
        surface.elevationSources.append(elevationSource)
        scene.baseSurface = surface
        /// The url of the scene service for buildings in Brest, France.
        let brestBuildingsServiceURL = URL(string: "https://tiles.arcgis.com/tiles/P3ePLMYs2RVChkJx/arcgis/rest/services/Buildings_Brest/SceneServer/layers/0")!
        // scene layer
        let sceneLayer = AGSArcGISSceneLayer(url: brestBuildingsServiceURL)
        self.sceneView.scene?.operationalLayers.add(sceneLayer)
    }
}