-1

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

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

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

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

 CLLocationDistance distance = [locA distanceFromLocation:locB];

但是,我不确定它是否使用大圆距离算法进行计算。有人对此有任何想法吗?非常感谢您的帮助。

4

2 回答 2

2

的文档distanceFromLocation:非常清楚:

这种方法通过追踪它们之间的一条遵循地球曲率的线来测量两个位置之间的距离。生成的弧线是一条平滑曲线,没有考虑两个位置之间的特定高度变化。

是的,这是大圆距离算法。

于 2015-11-24T17:33:18.023 回答
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));}

来源:地球上两点之间的距离

于 2015-11-24T17:16:48.760 回答