Adding a scene layer from a service 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 ArcGIS Maps SDK. Loading a scene layer from a service 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 a Scene object with a topographic basemap style.
Create a Surface object and add an ArcGISTiledElevationSource to it.
Set the surface to the scene's base surface.
Create an ArcGISSceneLayer with a URL and add it to the scene's operational layers.
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
// Copyright 2022 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 SwiftUI
import ArcGIS
structAddSceneLayerFromServiceView: View{
/// The scene for this sample.@StateObjectprivatevar scene: ArcGIS.Scene= {
// Creates a scene and sets an initial viewpoint.let scene =Scene(basemapStyle: .arcGISTopographic)
let point =Point(x: -4.4978, y: 48.3828, z: 62.0133, spatialReference: .wgs84)
let camera =Camera(locationPoint: point, heading: 41.65, pitch: 71.2, roll: 0)
scene.initialViewpoint =Viewpoint(targetExtent: point, camera: camera)
// Creates a surface and adds an elevation source.let surface =Surface()
surface.addElevationSource(ArcGISTiledElevationSource(url: .worldElevationService))
// Sets the surface to the scene's base surface. scene.baseSurface = surface
// Adds a scene layer from a URL to the scene's operational layers. scene.addOperationalLayer(ArcGISSceneLayer(url: .brestBuildingService))
return scene
}()
var body: someView {
SceneView(scene: scene)
}
}
privateextensionURL{
/// The URL of a Brest, France buildings scene service.staticvar brestBuildingService: URL {
URL(string: "https://tiles.arcgis.com/tiles/P3ePLMYs2RVChkJx/arcgis/rest/services/Buildings_Brest/SceneServer/layers/0")! }
/// The URL of the Terrain 3D ArcGIS REST Service.staticvar worldElevationService: URL {
URL(string: "https://elevation3d.arcgis.com/arcgis/rest/services/WorldElevation3D/Terrain3D/ImageServer")! }
}