How to find out distance between coordinates?

前端 未结 10 1188
猫巷女王i
猫巷女王i 2020-12-12 15:23

I want to make it so that it will show the amount of distance between two CLLocation coordinates. Is there someway to do this without a complex math formula? If there isn\'t

相关标签:
10条回答
  • 2020-12-12 16:13

    For objective-c

    You can use distanceFromLocation to find the distance between two coordinates.

    Code Snippets:

    CLLocation *loc1 = [[CLLocation alloc] initWithLatitude:lat1 longitude:lng1];
    
    CLLocation *loc2 = [[CLLocation alloc] initWithLatitude:lat2 longitude:lng2];
    
    CLLocationDistance distance = [loc1 distanceFromLocation:loc2];
    

    Your output will come in meters.

    0 讨论(0)
  • 2020-12-12 16:20

    For swift 4

       let locationOne = CLLocation(latitude: lat, longitude: long)
       let locationTwo = CLLocation(latitude: lat,longitude: long)
    
      let distance = locationOne.distance(from: locationTwo) * 0.000621371
    
      distanceLabel.text = "\(Int(round(distance))) mi"
    
    0 讨论(0)
  • 2020-12-12 16:23

    You can also use the HaversineDistance algorithm just like android developers used, this is helpfull when you have antother app in android similar to it, else above answer is correct for you.

    import UIKit
    
    func haversineDinstance(la1: Double, lo1: Double, la2: Double, lo2: Double, radius: Double = 6367444.7) -> Double {
    
    let haversin = { (angle: Double) -> Double in
        return (1 - cos(angle))/2
    }
    
    let ahaversin = { (angle: Double) -> Double in
        return 2*asin(sqrt(angle))
    }
    
    // Converts from degrees to radians
    let dToR = { (angle: Double) -> Double in
        return (angle / 360) * 2 * .pi
    }
    
    let lat1 = dToR(la1)
    let lon1 = dToR(lo1)
    let lat2 = dToR(la2)
    let lon2 = dToR(lo2)
    
    return radius * ahaversin(haversin(lat2 - lat1) + cos(lat1) * cos(lat2) * haversin(lon2 - lon1))
    }
    
    let amsterdam = (52.3702, 4.8952)
    let newYork = (40.7128, -74.0059)
    
    // Google says it's 5857 km so our result is only off by 2km which could be due to all kinds of things, not sure how google calculates the distance or which latitude and longitude google uses to calculate the distance.
    haversineDinstance(la1: amsterdam.0, lo1: amsterdam.1, la2: newYork.0, lo2: newYork.1)
    

    I have picked the code written above from the refrence link https://github.com/raywenderlich/swift-algorithm-club/blob/master/HaversineDistance/HaversineDistance.playground/Contents.swift

    0 讨论(0)
  • 2020-12-12 16:28

    Try this out:

    distanceInMeters = fromLocation.distanceFromLocation(toLocation)
    distanceInMiles = distanceInMeters/1609.344
    

    From Apple Documentation:

    Return Value: The distance (in meters) between the two locations.

    0 讨论(0)
提交回复
热议问题