后面写了什么代码 - [CLLocation distanceFromLocation:]或MKMetersBetweenMapPoints?

时间:2014-01-20 18:43:14

标签: objective-c mapkit core-location

我会感谢任何能向我解释这些方法之一(或两者)如何运作的算法的人:

我有两个CLLocationCoordinate2Ds或两个MKMapPoints - 我应该执行哪些计算来计算它们之间相对于真实世界地球表面的距离? (显然,欧几里德距离的独立计算不适用于此任务。)

背景:我想知道这些方法的内部知识是否有助于我优化一些涉及MapKit地图上大量点的计算。

1 个答案:

答案 0 :(得分:1)

关于Geographical distance的维基百科文章有一些计算测地距离的公式。

以下是我正在使用的一段代码,它给了我可接受的结果:

const float EarthRadius = 6378137.0f;

float SquaredGeodesicDistance(CLLocationCoordinate2D a, CLLocationCoordinate2D b)
{
    float dtheta = (a.latitude - b.latitude) * (M_PI / 180.0);
    float dlambda = (a.longitude - b.longitude) * (M_PI / 180.0);
    float mean_t = (a.latitude + b.latitude) * (M_PI / 180.0) / 2.0;
    float cos_meant = cosf(mean_t);

    return (EarthRadius * EarthRadius) * (dtheta * dtheta + cos_meant * cos_meant * dlambda * dlambda);
}

float GeodesicDistance(CLLocationCoordinate2D a, CLLocationCoordinate2D b)
{
    return sqrtf(SquaredGeodesicDistance(a, b));
}