Skip to content

Commit 47de6e9

Browse files
committed
Address PR feedback
1 parent dc4e395 commit 47de6e9

File tree

2 files changed

+39
-44
lines changed

2 files changed

+39
-44
lines changed

Shared/Samples/Augment reality to navigate route/AugmentRealityToNavigateRouteView.ARSceneView.swift

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ extension AugmentRealityToNavigateRouteView {
9797
private(set) var routeGraphicsOverlay = GraphicsOverlay()
9898

9999
/// The elevation surface set to the base surface of the scene.
100-
private(set) var elevationSurface: Surface = {
100+
private let elevationSurface: Surface = {
101101
let elevationSurface = Surface()
102102
elevationSurface.navigationConstraint = .unconstrained
103103
elevationSurface.opacity = 0
@@ -177,25 +177,22 @@ extension AugmentRealityToNavigateRouteView {
177177
/// - polyline: The polyline geometry of the route.
178178
/// - Returns: A polyline with adjusted elevation.
179179
private func addingElevation(_ z: Double, to polyline: Polyline) async throws -> Polyline? {
180-
if let densifiedPolyline = GeometryEngine.densify(polyline, maxSegmentLength: 0.3) as? Polyline {
181-
let polylineBuilder = PolylineBuilder(spatialReference: densifiedPolyline.spatialReference)
182-
for part in densifiedPolyline.parts {
183-
for point in part.points {
184-
let elevation = try await elevationSurface.elevation(at: point)
185-
let newPoint = GeometryEngine.makeGeometry(from: point, z: elevation + z)
186-
// Put the new point 3 meters above the ground elevation.
187-
polylineBuilder.add(newPoint)
188-
}
180+
guard let densifiedPolyline = GeometryEngine.densify(polyline, maxSegmentLength: 0.3) as? Polyline else { return nil }
181+
let polylineBuilder = PolylineBuilder(spatialReference: densifiedPolyline.spatialReference)
182+
for part in densifiedPolyline.parts {
183+
for point in part.points {
184+
let elevation = try await elevationSurface.elevation(at: point)
185+
let newPoint = GeometryEngine.makeGeometry(from: point, z: elevation + z)
186+
// Put the new point 3 meters above the ground elevation.
187+
polylineBuilder.add(newPoint)
189188
}
190-
return polylineBuilder.toGeometry()
191-
} else {
192-
return nil
193189
}
190+
return polylineBuilder.toGeometry()
194191
}
195192

196193
/// Starts navigating the route.
197194
func startNavigation() async throws {
198-
guard let routeResult = routeResult else { return }
195+
guard let routeResult else { return }
199196
routeTracker = RouteTracker(
200197
routeResult: routeResult,
201198
routeIndex: 0,
@@ -237,7 +234,7 @@ extension AugmentRealityToNavigateRouteView {
237234

238235
/// Monitors the asynchronous stream of voice guidances.
239236
private func trackVoiceGuidance() async {
240-
guard let routeTracker = routeTracker else { return }
237+
guard let routeTracker else { return }
241238
for try await voiceGuidance in routeTracker.voiceGuidances {
242239
speechSynthesizer.stopSpeaking(at: .word)
243240
speechSynthesizer.speak(AVSpeechUtterance(string: voiceGuidance.text))

Shared/Samples/Augment reality to navigate route/AugmentRealityToNavigateRouteView.swift

Lines changed: 27 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -25,28 +25,32 @@ struct AugmentRealityToNavigateRouteView: View {
2525
/// The error shown in the error alert.
2626
@State private var error: Error?
2727

28+
/// The point on the map where the user tapped.
29+
@State private var tapLocation: Point?
30+
2831
var body: some View {
2932
MapView(
3033
map: model.map,
3134
graphicsOverlays: model.graphicsOverlays
3235
)
36+
.locationDisplay(model.locationDisplay)
3337
.onSingleTapGesture { _, mapPoint in
34-
Task {
35-
do {
36-
try await model.addRouteGraphic(for: mapPoint)
37-
} catch {
38-
self.error = error
39-
}
38+
tapLocation = mapPoint
39+
}
40+
.task(id: tapLocation) {
41+
guard let tapLocation else { return }
42+
43+
do {
44+
try await model.addRouteGraphic(for: tapLocation)
45+
} catch {
46+
self.error = error
4047
}
4148
}
42-
.locationDisplay(model.locationDisplay)
4349
.task {
44-
Task {
45-
do {
46-
try await model.setup()
47-
} catch {
48-
self.error = error
49-
}
50+
do {
51+
try await model.setUp()
52+
} catch {
53+
self.error = error
5054
}
5155
}
5256
.overlay(alignment: .top) {
@@ -172,7 +176,7 @@ private extension AugmentRealityToNavigateRouteView {
172176

173177
/// Performs important tasks including setting up the location display, creating route parameters,
174178
/// and loading the scene elevation source.
175-
func setup() async throws {
179+
func setUp() async throws {
176180
try await startLocationDisplay()
177181
try await makeParameters()
178182
try await sceneModel.loadElevationSource()
@@ -215,21 +219,15 @@ private extension AugmentRealityToNavigateRouteView {
215219
endPoint = mapPoint
216220
sceneModel.routeParameters.setStops(makeStops())
217221

218-
Task {
219-
do {
220-
let routeResult = try await sceneModel.routeTask.solveRoute(
221-
using: sceneModel.routeParameters
222-
)
223-
if let firstRoute = routeResult.routes.first {
224-
let routeGraphic = Graphic(geometry: firstRoute.geometry)
225-
routeGraphicsOverlay.addGraphic(routeGraphic)
226-
sceneModel.routeResult = routeResult
227-
try await sceneModel.makeRouteOverlay()
228-
statusText = "Tap camera to start navigation."
229-
}
230-
} catch {
231-
throw error
232-
}
222+
let routeResult = try await sceneModel.routeTask.solveRoute(
223+
using: sceneModel.routeParameters
224+
)
225+
if let firstRoute = routeResult.routes.first {
226+
let routeGraphic = Graphic(geometry: firstRoute.geometry)
227+
routeGraphicsOverlay.addGraphic(routeGraphic)
228+
sceneModel.routeResult = routeResult
229+
try await sceneModel.makeRouteOverlay()
230+
statusText = "Tap camera to start navigation."
233231
}
234232
}
235233
}

0 commit comments

Comments
 (0)