Random Look Around Coordinates

I want to generate randomised MKLookAroundScene for my world exploration app (think geogussr functionality). How can i achieve that with MapKit? I have tried

struct LookAroundView: View {
    @State private var lookAroundScene: MKLookAroundScene?
    @State private var yOffset: CGFloat = 0
    
    func generateRandomCoordinate() {
        let minLatitude = -90.0
        let maxLatitude = 90.0
        let minLongitude = -180.0
        let maxLongitude = 180.0
        
        let randomCoordinate = CLLocationCoordinate2D(
            latitude: Double.random(in: minLatitude...maxLatitude),
            longitude: Double.random(in: minLongitude...maxLongitude)
        )

        checkLookAroundAvailability(coordinate: randomCoordinate)
    }

    func checkLookAroundAvailability(coordinate: CLLocationCoordinate2D) {
        Task {
            let request = MKLookAroundSceneRequest(coordinate: coordinate)
            if let scene = try? await request.scene {
                DispatchQueue.main.async {
                    self.lookAroundScene = scene
                }
            } else {
                generateRandomCoordinate()
            }
        }
    }

    var body: some View {
        Group {
            if let scene = lookAroundScene {
                LookAroundPreview(initialScene: scene)
            } else {
                Button(action: {
                                generateRandomCoordinate()
                            }) {
                                Text("Generate Random Coordinate")
                            }
                            .offset(y: yOffset)
            }
        }
    }
}

but it didn't work. I put the yOffset change there to debug, and it seems that self.lookAroundScene = scene never gets executed.

If there are any other options, please let me know!

Answered by NathanielB in 775421022

Have you tried catching the error from your try await request.scene? I have just finished a similar task and no issues. Perhaps also try using MainActor.run so that you are not combining async/await with DispatchQueue? I've heard others having issues when mixing the two.

        Task {
            do {
                let request = MKLookAroundSceneRequest(coordinate: coordinate)
                let scene = try await request.scene
                await MainActor.run {
                    self.lookAroundScene = scene
                }
            } catch {
                print(error.localizedDescription) // This will help!
                generateRandomCoordinate()
            }
        }
Accepted Answer

Have you tried catching the error from your try await request.scene? I have just finished a similar task and no issues. Perhaps also try using MainActor.run so that you are not combining async/await with DispatchQueue? I've heard others having issues when mixing the two.

        Task {
            do {
                let request = MKLookAroundSceneRequest(coordinate: coordinate)
                let scene = try await request.scene
                await MainActor.run {
                    self.lookAroundScene = scene
                }
            } catch {
                print(error.localizedDescription) // This will help!
                generateRandomCoordinate()
            }
        }
Random Look Around Coordinates
 
 
Q