2012-06-18 147 views
26

我從文檔中知道我們可以使用函數distanceFromLocation:找到兩個CLLocation點之間的距離。但我的問題是我沒有CLLocation數據類型與我,我有CLLocationCoordinate2D點。那麼我怎樣才能找到兩個CLLocationCoordinate2D點之間的距離。我看過這篇文章post,但對我沒有幫助。CLLocationCoordinate2D點之間的查找距離

+0

距離計算實際上是相當棘手。你應該再看看CLLocation。 –

+0

你有拉和長,然後創建cllocation,然後使用CLLocationDistance米= [newLocation distanceFromLocation:oldLocation]; –

+0

檢查這樣:[distanceFromLocation - 兩點之間計算距離] [1] [1]:http://stackoverflow.com/questions/3905896/distancefromlocation-calculate-distance-between-two-points – webmastx

回答

31

你應該使用創建CLLocation的對象,

- (id)initWithLatitude:(CLLocationDegrees)latitude 
    longitude:(CLLocationDegrees)longitude; 

現在使用它,你可以找到距離。

+5

使用代碼CLLocationDistance distance = [aCLLocationA distanceFromLocation:aCLLocationB]; //距離是以米爲單位的雙倍距離(源 - http://stackoverflow.com/a/10432069/1364174) –

+0

無需創建CLLocation以獲取點之間的距離。請看看我的回答底部 –

14

斯威夫特4:

extension CLLocation { 

    /// Get distance between two points 
    /// 
    /// - Parameters: 
    /// - from: first point 
    /// - to: second point 
    /// - Returns: the distance in meters 
    class func distance(from: CLLocationCoordinate2D, to: CLLocationCoordinate2D) -> CLLocationDistance { 
     let from = CLLocation(latitude: from.latitude, longitude: from.longitude) 
     let to = CLLocation(latitude: to.latitude, longitude: to.longitude) 
     return from.distance(to) 
    } 
} 
+5

但我覺得更多的是這樣的: 擴展CLLocationCoordinate2D {// 在meteres FUNC距離(q若要:CLLocationCoordinate2D) - > CLLocationDistance { 從= CLLocation(緯度令:self.latitude,經度:self.longitude) 租給= CLLocation(緯度:to.latitude,經度:to.longitude) 回報from.distanceFromLocation(到) }} 爲 – kwerle

23

如果這是確定你獲得距離米點之間,然後

CLLocationCoordinate2D coordinate1 = <some value> 
CLLocationCoordinate2D coordinate2 = <some value> 
… 
MKMapPoint point1 = MKMapPointForCoordinate(coordinate1); 
MKMapPoint point2 = MKMapPointForCoordinate(coordinate2); 
CLLocationDistance distance = MKMetersBetweenMapPoints(point1, point2); 

將返回兩個點之間的距離。無需通過給定CLLocationCoordinate2D創建CLLocation。這個定義是可用的,因爲iOS 4.0

+0

我的作品以及 – VBaarathi

5
let point1 = MKMapPointForCoordinate(myLocation) 
    let point2 = MKMapPointForCoordinate(friendLocation) 
    let distance = MKMetersBetweenMapPoints(point1, point2)/1000 
    let distanceStr = NSString(format: "%.3f", distance) 

簡單版本的Valleri的答案。除以1000以獲得KM,然後轉換爲字符串。

+0

不工作的迅速3。 –

3

Swift4:結合上述想法

extension CLLocationCoordinate2D { 
    //distance in meters, as explained in CLLoactionDistance definition 
    func distance(from: CLLocationCoordinate2D) -> CLLocationDistance { 
     let destination=CLLocation(latitude:from.latitude,longitude:from.longitude) 
     return CLLocation(latitude: latitude, longitude: longitude).distance(from: destination) 
    } 
}