Precision to users location - Help needed :-)

Hi All

I’m playing around with at simple golf app for iPhone. The idea is to show me the distance to the hole based on my current location. This is kind of working … Since i get a value that seems correct.
But if i’m standing still (left the phone on a table), the distance to the hole jumps all over the place. I see +/- 70 meters.
I know the precision of a consumer device is not impressive, but i believe i should be able to se a result around +/- 5 meters.

Any help will be much appreciated.
I have played around with the code so many times, so there may be some (a lot) that can be removed.

I have created a view for the HoleDetails. Here a picture of the hole is shown and the current distance to the flag is provide. A MapFunction file. And file with the course and hole information

Again any help and directions is appreciated

HoleDetails:

import MapKit
import CoreLocation
import SwiftUI

struct HoleDetails: View {
    
    @StateObject var locationManager = MapViewModel()
    @Binding var klub:String
    @Binding var valgtbane: String
    @State var tracking:MapUserTrackingMode = .follow
    
    @State var holeInfo:[HoleDefinition] = [HoleDefinition]()
    @State var dataService = DataService()
    
    @State var sheetVisiable = false
    @State var selectedHole: String = ""
    
    
    @State var searchValue = 1
    var currentIndex = 0
    
    
    var body: some View {
        ZStack {
            Color(red: 0.639, green: 0.847, blue: 0.792)
                .ignoresSafeArea()
            ForEach(holeInfo) { info in
                if String(searchValue) == info.HoleNumber
                {
                    
                    VStack{
                        
                        HStack{
                            Button {
                                if searchValue == 1 {}
                                else {searchValue -= 1}
                            } label:{
                                Image(systemName: "chevron.backward")
                            }
                            Spacer()
                            
                            Image(systemName: String(info.HoleNumber) + ".circle")
                            
                            
                            
                            Text(" Par " + String(info.par))
                            Spacer()
                            
                            Button {
                                if searchValue == 18 {}
                                else {searchValue += 1}
                            } label:{
                                Image(systemName: "chevron.forward")
                            }
                            
                            
                        }   .font(.largeTitle)
                            .fontWeight(.semibold)
                            .foregroundColor(Color(red: 0.506, green: 0.003, blue: 0.502))
                            .padding(.horizontal)
                        
                        Divider()
                            .frame(minHeight: 5)
                            .overlay(Color(red: 0.506, green: 0.003, blue: 0.502))
                        
                        Image(info.imagename)
                            .resizable()
                            .aspectRatio(contentMode: .fit)
                            .onTapGesture {
                                selectedHole = info.imagename
                                sheetVisiable = true
                            }
                            .padding()
                        
                        
                        
                        switch locationManager.locationManager?.authorizationStatus {
                            
                        case .authorizedWhenInUse, .some(.authorizedAlways):
                            
                            @State var place1 = CLLocation(latitude: locationManager.currentLocation?.latitude ?? 0.00, longitude: locationManager.currentLocation?.longitude ?? 0.00)
                            let place2 = CLLocation(latitude: info.Lat, longitude: info.Lon)
                            @State var distanceInMeters:Double = place1.distance(from: place2)
                            Text("Afstand til midten af green:")
                                .padding(.bottom)
                            
                            Text("\(distanceInMeters, specifier: "%.2f")")
                                .font(.title)
                            
                        case .restricted, .denied, .none, .some(.notDetermined), .some(_):
                            Text("Current location data was restricted or unavailable.")
                                .font(.title)
                            
                            Spacer()
                        }
                        
                    }.onAppear {
                        locationManager.checkIfLocationServicesIsEnabled()
                    }
                    .sheet(isPresented: $sheetVisiable) {
                        HoleView_Enlarge(selectedHole: $selectedHole, sheetVisible: $sheetVisiable)
                    }
                    .gesture(DragGesture(minimumDistance: 0, coordinateSpace: .local)
                        .onEnded({ value in
                            if value.translation.width < 0 {
                                if searchValue == 18 {}
                                else {searchValue += 1}
                            }
                            
                            if value.translation.width > 0 {
                                if searchValue == 1 {}
                                else {searchValue -= 1}
                            }
                        }))
                }
                
            }
            
            
        }.onAppear{holeInfo = dataService.getHolesAll(klub: klub, valgtbane: valgtbane)}
    }
    
    
}

struct HoleDetails_Previews: PreviewProvider {
    static var previews: some View {
        HoleDetails(klub: Binding.constant("Hørsholm Golf Klub"), valgtbane: Binding.constant("Vest-Nord"))
    }
}

MapFunction

import SwiftUI
import CoreLocation
import CoreLocationUI
import MapKit
import Foundation



enum MapDetails {
    static let startingLocation = CLLocationCoordinate2D(latitude: 55.677984489004544, longitude: 12.524586647705545)
    static let defaultSpan = MKCoordinateSpan(latitudeDelta: 0.01, longitudeDelta: 0.01)
}

final class MapViewModel: NSObject, ObservableObject, CLLocationManagerDelegate {
    
    @Published var region = MKCoordinateRegion(center: MapDetails.startingLocation, span: MapDetails.defaultSpan)
    var locationManager: CLLocationManager?
    private let manager = CLLocationManager()
    @Published var location: CLLocationCoordinate2D?
    @Published var currentLocation: CLLocationCoordinate2D?
    
    
    func checkIfLocationServicesIsEnabled() {
        if CLLocationManager.locationServicesEnabled() {
            locationManager = CLLocationManager()
            locationManager!.delegate = self
            
        } else {
            print("You need to update your settings")
        }
    }
    
    override init() {
        super.init()
        manager.delegate = self
        manager.desiredAccuracy = kCLLocationAccuracyBestForNavigation
        manager.requestWhenInUseAuthorization()
        manager.startUpdatingLocation()
        
    }
    

DataService

import Foundation
import SwiftUI


struct DataService {
    let club08_courseFront:[HoleDefinition] =
    [HoleDefinition(club: 8, Course: "Front", HoleNumber: "1", imagename: "1-hul-2019", par: 4, HCP: 00, MensBackTee: 286, MensTee: 286, WomenBackTee: 286, WomenTee: 244, Lat: 55.877614, Lon: 12.533095),
     HoleDefinition(club: 8, Course: "Front", HoleNumber: "2", imagename: "2-hul-2019", par: 4, HCP: 00, MensBackTee: 286, MensTee: 286, WomenBackTee: 286, WomenTee: 123, Lat: 55.875104, Lon: 12.527999),
     HoleDefinition(club: 8, Course: "Front", HoleNumber: "3", imagename: "3-hul-2019", par: 3, HCP: 00, MensBackTee: 286, MensTee: 286, WomenBackTee: 286, WomenTee: 387, Lat: 55.874358, Lon: 12.529235),
     HoleDefinition(club: 8, Course: "Front", HoleNumber: "4", imagename: "4-hul-2019", par: 4, HCP: 00, MensBackTee: 286, MensTee: 286, WomenBackTee: 286, WomenTee: 285, Lat: 55.873958, Lon: 12.535927),
     HoleDefinition(club: 8, Course: "Front", HoleNumber: "5", imagename: "5-hul-2019", par: 4, HCP: 00, MensBackTee: 286, MensTee: 286, WomenBackTee: 286, WomenTee: 165, Lat: 55.875343, Lon: 12.531754),
     HoleDefinition(club: 8, Course: "Front", HoleNumber: "6", imagename: "6-hul-2019", par: 3, HCP: 00, MensBackTee: 286, MensTee: 286, WomenBackTee: 286, WomenTee: 371, Lat: 55.874374, Lon: 12.531181),
     HoleDefinition(club: 8, Course: "Front", HoleNumber: "7", imagename: "7-hul-2019", par: 4, HCP: 00, MensBackTee: 286, MensTee: 286, WomenBackTee: 286, WomenTee: 83, Lat: 55.877043, Lon: 12.531913),
     HoleDefinition(club: 8, Course: "Front", HoleNumber: "8", imagename: "8-hul-2019", par: 4, HCP: 00, MensBackTee: 286, MensTee: 286, WomenBackTee: 286, WomenTee: 269, Lat: 55.878467, Lon: 12.526468),
     HoleDefinition(club: 8, Course: "Front", HoleNumber: "9", imagename: "9-hul-2019", par: 4, HCP: 00, MensBackTee: 286, MensTee: 286, WomenBackTee: 286, WomenTee: 380, Lat: 55.880314, Lon: 12.529265)]
    

BR
Loepp