使用经纬度的GPS坐标计算距离

11

在 iPhone 上,我会得到用户的位置信息,例如:纬度为 39.470920,经度为 -0.373192;这是 A 点。

我需要用另一个 GPS 坐标点 B 创建一条线。然后,计算从 A 到 B 的直线与另一个点 C 的垂距。

问题是,我对角度的值感到困惑。我希望结果以米为单位。需要进行什么转换?最终计算公式会是什么样子?


我也有同样的问题,这里的两个答案都没有解决。RabinDev的回答更接近一些,但他没有解决度数转换为米的问题。有什么建议吗? - Rodrigo Castro
3个回答

29
为什么不使用 CLLocationdistanceFromLocation: 方法?它可以告诉你接收方和另一个 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];

就是这么简单。


你好,Toastor,请提供距离计算的示例代码。谢谢。 - Durga
完成。不过这类东西很容易从参考库中学习。我在我的回答中发布了链接,你可能想看一下。 - Toastor

1

Swift 3.0+

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

let distance = source.distance(from: destination)

当您拥有位置数组时:
使用以下缩减方法获取点阵列的距离。
这里的“locations”是类型为“CLLocation”的数组。
 let calculatedDistance = locations.reduce((0, locations[0])) { ($0.0 + $0.1.distance(from: $1), $1)}.0

在这里,你会得到为单位的距离。

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

你的问题也是要找到线段(A,B)和点C之间的最短线路。 我猜如果你的3个CLLocation彼此相近(相距不到几公里),你可以将坐标“视为”平面上的点进行计算,并使用C++中的this,或者thisthis,并将CLLocations“视为”平面上的x和y坐标。

如果你的坐标相距很远,或者精确度很重要,则地球的球形形状很重要,你需要使用大圆距离和其他球面几何知识来处理。


嗨,Rabindev,请发送任何示例给我。谢谢。 - Durga
加1,为超级极客球形参考。 :-) - eric

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接