您的位置:首页 > 移动开发 > IOS开发

iOS-计算两个经纬度之间的距离和方位

2014-03-21 18:45 1201 查看
double DegreesToRadians(double degrees) {return degrees * M_PI / 180;};
double RadiansToDegrees(double radians) {return radians * 180 / M_PI;};

- (NSString *)bearingToLocationFromCoordinate:(CLLocation*)fromLoc toCoordinate:(CLLocation*)toLoc
{
double lat1 = DegreesToRadians(fromLoc.coordinate.latitude);
double lon1 = DegreesToRadians(fromLoc.coordinate.longitude);

double lat2 = DegreesToRadians(toLoc.coordinate.latitude);
double lon2 = DegreesToRadians(toLoc.coordinate.longitude);

double dLon = lon2 - lon1;

double y = sin(dLon) * cos(lat2);
double x = cos(lat1) * sin(lat2) - sin(lat1) * cos(lat2) * cos(dLon);
double radiansBearing = atan2(y, x);

NSString *str ;
double aDeg = RadiansToDegrees(radiansBearing);

if (aDeg >= 75 && aDeg <= 105)
{
str = @"正东";
}
if (aDeg > 15 && aDeg < 75)
{
str = @"东北";
}
if (aDeg >= -15 && aDeg <= 15)
{
str = @"正北";
}
if (aDeg > -75 && aDeg < -15)
{
str = @"西北";
}
if (aDeg >= -105 && aDeg <= -75)
{
str = @"正西";
}
if (aDeg > -165 && aDeg < -105)
{
str = @"西南";
}
if ((aDeg >= 165 && aDeg <= 180) || (aDeg >= -180 && aDeg <= -165))
{
str = @"正南";
}
if (aDeg > 105 && aDeg < 165)
{
str = @"东南";
}

CLLocationDistance meters = [fromLoc distanceFromLocation:toLoc];
return [NSString stringWithFormat:@"%@%f米", str, meters];
}
参考资料来自stackoverflow
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息