GPS坐标以度为单位计算距离

时间:2011-08-09 09:35:36

标签: iphone ios4 map gps

在iPhone上,我以十进制度数获取用户的位置,例如:北纬39.470920和经度= -0.373192;那是A点。

我需要创建一条带有另一个GPS坐标的线,也是十进制度,B点。然后,计算从A到B的线与另一个点C之间的距离(垂直)。

问题是我对度数的值感到困惑。我希望得到米的结果。转换需要什么?计算这个的最终公式怎么样?

3 个答案:

答案 0 :(得分:29)

为什么不使用CLLocation distanceFromLocation:方法?它会告诉您接收器与另一个CLLocation之间的精确距离。

CLLocation *locationA = [[CLLocation alloc] initWithLatitude:12.123456 longitude:12.123456];
CLLocation *locationB = [[CLLocation alloc] initWithLatitude:21.654321 longitude:21.654321];

CLLocationDistance distanceInMeters = [locationA distanceFromLocation:locationB];

// CLLocation is aka double

[locationA release];
[locationB release];

就这么简单。

答案 1 :(得分:1)

  • (CLLocationDistance)distanceFromLocation:(const CLLocation *)location是获取CLLocation到另一个的距离的方法。

您的问题还在于寻找线(A,B)和C点之间的最短线。 我想如果你的3个CLLocations接近(相距不到几公里),你可以做数学“仿佛”坐标是单个平面上的点,并在C ++中使用this,或{{3} }或this只需使用CLLocations“就好像”它们是飞机上的x和y坐标。

如果您的坐标距离很远,或者精确度非常重要,那么地球的球形很重要,您需要使用this和球体表面上的其他几何体来做事。

答案 2 :(得分:1)

Swift 3.0 +

仅计算两个坐标之间的距离:

let distance = source.distance(from: destination)

如果您有多个地点:

要获得点数组的距离,请使用以下reduce方法。

此处locationsCLLocation类型的数组。

 let calculatedDistance = locations.reduce((0, locations[0])) { ($0.0 + $0.1.distance(from: $1), $1)}.0

在这里,您将获得的距离。