iOS中的大圆距离公式

时间:2015-11-24 11:29:57

标签: ios iphone core-location great-circle

我需要使用大圆公式计算纬度和经度之间的距离。

我知道的一种方法是使用以下内容:

 CLLocation *locA = [[CLLocation alloc] initWithLatitude:lat1 longitude:long1];

 CLLocation *locB = [[CLLocation alloc] initWithLatitude:lat2 longitude:long2];

 CLLocationDistance distance = [locA distanceFromLocation:locB];

但是,我不确定它是否使用Great Circle Distance算法进行计算。有没有人对此有任何想法?非常感谢帮助。

2 个答案:

答案 0 :(得分:1)

distanceFromLocation:的文档非常明确:

  

此方法通过跟踪两个位置之间的曲线来测量两个位置之间的距离。得到的弧线是平滑的曲线,不考虑两个位置之间的特定高度变化。

是的,这是Great Circle Distance算法。

答案 1 :(得分:0)

+ (CGFloat)directMetersFromCoordinate:(CLLocationCoordinate2D)from toCoordinate:(CLLocationCoordinate2D)to {

static const double DEG_TO_RAD = 0.017453292519943295769236907684886;  
static const double EARTH_RADIUS_IN_METERS = 6372797.560856;  

double latitudeArc  = (from.latitude - to.latitude) * DEG_TO_RAD;
double longitudeArc = (from.longitude - to.longitude) * DEG_TO_RAD;
double latitudeH = sin(latitudeArc * 0.5);
latitudeH *= latitudeH;
double lontitudeH = sin(longitudeArc * 0.5);
lontitudeH *= lontitudeH;
double tmp = cos(from.latitude*DEG_TO_RAD) * cos(to.latitude*DEG_TO_RAD);
return EARTH_RADIUS_IN_METERS * 2.0 * asin(sqrt(latitudeH + tmp*lontitudeH));}

来源:Distance between two points on Globe