我从谷歌地图获得了一些 GPS 坐标,我需要使用 Objective C 找到它们之间的距离。我已经实现了这个公式,但我得到的结果很大。
我已经通过将 Google 地图中的值传回 Google 地球和 Internet 上的地理编码服务来测试这些值,并且一切都检查出来了。我现在开始怀疑余弦定律要求我在传递坐标之前对坐标进行某种转换。
我对 Haversine 公式进行了类似的实现,但这也给了我很大的结果。然后我切换到余弦,因为它更容易调试并且我不需要非常高的精度。
希望有人可以对此有所了解,或使用代码:)
- (CGFloat) calculateDistanceBetweenPoints:(CGPoint) origin andDestination:(CGPoint) destination {
//To convert kilometers to miles, divide by 1.609
// x = latitude
// y = longitude
/* example:
Dubai : 25.248665, 55.352917
Amsterdam : 52.309071, 4.763385
Approx dist: 5,182.62 KM
Calc. dist : 8,253.33
*/
CGFloat toRad = (M_PI / 180);
CGFloat R = 6371.0f; //earth's mean radius in Km
CGFloat sinePart = sinf( origin.x * toRad ) * sinf( destination.x * toRad );
CGFloat cosinePart = cosf( origin.x * toRad ) * cosf( destination.x * toRad );
CGFloat deltaCosinePart = cosf( ( destination.y - origin.y ) * toRad );
CGFloat delta = acosf( sinePart + cosinePart * deltaCosinePart) * R;
return delta;
}
以上是根据此处引用的链接计算得出的:stackoverflow question