在iPhone上,我以十进制度数获取用户的位置,例如:北纬39.470920和经度= -0.373192;那是A点。
我需要创建一条带有另一个GPS坐标的线,也是十进制度,B点。然后,计算从A到B的线与另一个点C之间的距离(垂直)。
问题是我对度数的值感到困惑。我希望得到米的结果。转换需要什么?计算这个的最终公式怎么样?
答案 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)
您的问题还在于寻找线(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方法。
此处locations
是CLLocation
类型的数组。
let calculatedDistance = locations.reduce((0, locations[0])) { ($0.0 + $0.1.distance(from: $1), $1)}.0
在这里,您将获得米的距离。