找到CLLocationCoordinate2D点之间的距离

rak*_*hNS 34 iphone core-location ios

我从文档中知道,我们可以CLLocation使用函数找到两点之间的距离distanceFromLocation:.但我的问题是我没有CLLocation数据类型与我,我有CLLocationCoordinate2D点.那么如何找到两个CLLocationCoordinate2D点之间的距离.我看过帖子但对我没用.

Apu*_*urv 35

你应该创建一个CLLocation对象,

- (id)initWithLatitude:(CLLocationDegrees)latitude
    longitude:(CLLocationDegrees)longitude;
Run Code Online (Sandbox Code Playgroud)

然后,您应该能够使用计算距离

[location1 distanceFromLocation:location2];
Run Code Online (Sandbox Code Playgroud)

  • 使用代码CLLocationDistance distance = [aCLLocationA distanceFromLocation:aCLLocationB]; //距离是表示以米为单位的距离的双倍(来源 - http://stackoverflow.com/a/10432069/1364174) (5认同)

Val*_*der 30

如果您可以在点之间获得距离,那么

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

将返回两点之间的距离.不需要创造CLLocation给定的CLLocationCoordinate2D.此定义自iOS 4.0起可用

  • 很好,但是需要链接MapKit。然后使用CLLocation并不需要距离。 (2认同)

Avi*_*oss 25

斯威夫特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)
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 但我想更像这样:扩展CLLocationCoordinate2D {//在meteres func distance(#to:CLLocationCoordinate2D) - > CLLocationDistance {let from = CLLocation(latitude:self.latitude,longitude:self.longitude)let to = CLLocation(纬度: to.latitude,经度:to.longitude)从.distanceFromLocation(to)}}返回 (9认同)

Eri*_*uan 18

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)
    }
}
Run Code Online (Sandbox Code Playgroud)


VBa*_*thi 5

    let point1 = MKMapPointForCoordinate(myLocation)
    let point2 = MKMapPointForCoordinate(friendLocation)
    let distance = MKMetersBetweenMapPoints(point1, point2)/1000
    let distanceStr = NSString(format: "%.3f", distance)
Run Code Online (Sandbox Code Playgroud)

简单版的Valleri的答案.除以1000得到KM,然后转换为字符串.