计算 2 个坐标 iphone 之间的距离 - 最佳实践

Posted

技术标签:

【中文标题】计算 2 个坐标 iphone 之间的距离 - 最佳实践【英文标题】:calculate distance between 2 coordinates iphone - best practice 【发布时间】:2012-01-16 09:13:08 【问题描述】:

我正在完成一个应用程序,希望我需要向用户显示他与大约 500 个坐标之间的距离。

使用 CLLocation 方法计算,效果不错,但在 iPhone 4 中完成每个位置的计算大约需要 1 分钟。

最好的方法是什么?使用跨度?还有其他更快的方法吗?

谢谢大家,

【问题讨论】:

【参考方案1】:

我认为 Sahgal 是对的,这里有一些代码,也许它会对你有所帮助。

+(CGFloat)calculateDistanceBetweenSource:(CLLocationCoordinate2D)firstCoords andDestination:(CLLocationCoordinate2D)secondCoords 


    // this radius is in KM => if miles are needed it is calculated during setter of Place.distance

    double nRadius = 6371;

    // Get the difference between our two points

    // then convert the difference into radians

    double nDLat = (firstCoords.latitude - secondCoords.latitude)* (M_PI/180);
    double nDLon = (firstCoords.longitude - secondCoords.longitude)* (M_PI/180);

    double nLat1 =  secondCoords.latitude * (M_PI/180);
    double nLat2 =  secondCoords.latitude * (M_PI/180);

    double nA = pow ( sin(nDLat/2), 2 ) + cos(nLat1) * cos(nLat2) * pow ( sin(nDLon/2), 2 );

    double nC = 2 * atan2( sqrt(nA), sqrt( 1 - nA ));

    double nD = nRadius * nC;

    NSLog(@"Distance is %f",nD);

    return nD; // converts to miles or not (if en_) => implicit in method

【讨论】:

【参考方案2】:

看过其他答案,不知道对不对,但我觉得有更好的解决方案:

(from documentation):

- (CLLocationDistance)distanceFromLocation:(const CLLocation *)location

你可以这样使用它:

- (CLLocationDistance) DistanceBetweenCoordinate:(CLLocationCoordinate2D)originCoordinate andCoordinate:(CLLocationCoordinate2D)destinationCoordinate 

        CLLocation *originLocation = [[CLLocation alloc] initWithLatitude:originCoordinate.latitude longitude:originCoordinate.longitude];
        CLLocation *destinationLocation = [[CLLocation alloc] initWithLatitude:destinationCoordinate.latitude longitude:destinationCoordinate.longitude];
        CLLocationDistance distance = [originLocation distanceFromLocation:destinationLocation];
        [originLocation release];
        [destinationLocation release];

        return distance;
    

【讨论】:

我用过这段代码,但它使用数据网络,而且比使用@Marvin 选项慢。谢谢。 是的,目前在里斯本。很高兴认识其他也是 iPhone 开发人员的人。 podemos falar por iChat: rui.lopes@me.com【参考方案3】:

这是代码..

-(NSString *)findDistanceBetweenTwoLatLon

    int intEarthRadius = 3963;

    double dblLat1 = DegreesToRadians(firstLatitude);
    double dblLon1 = DegreesToRadians(firstLongitude);

    double dblLat2 = DegreesToRadians(secondLatitude);
    double dblLon2 = DegreesToRadians(secondLongitude);

    float fltLat = dblLat2 - dblLat1;
    float fltLon = dblLon2 - dblLon1;

    double a = sin(fltLat/2) * sin(fltLat/2) + cos(dblLat2) * cos(dblLat2) * sin(fltLon/2) * sin(fltLon/2) ;
    double c = 2 * atan2(sqrt(a), sqrt(1-a));
    double d = intEarthRadius * c;

    double dMeters = d * kOneMileMeters;

    NSString *strDistance = [NSString stringWithFormat:@"%1.2f meters",dMeters];

    return strDistance;

定义所有这个宏..

度数为弧度

#define DegreesToRadians(degrees) (degrees * M_PI / 180)

在哪里 M_PI

#define M_PI   3.14159265358979323846264338327950288 
#define kOneMileMeters 1609.344

【讨论】:

【参考方案4】:

您可以尝试另一种方法。您可以获取两个点的经纬度(假设经纬度查找不会花费那么多时间)并且有公式可以使用经纬度计算距离。

【讨论】:

以上是关于计算 2 个坐标 iphone 之间的距离 - 最佳实践的主要内容,如果未能解决你的问题,请参考以下文章

如何计算任何坐标处2个经度之间的距离?我们可以假设地球是一个球体吗?

iOS 2个坐标之间的距离

python 平面内怎么计算两条线段之间的最短距离?

数百个坐标之间的Nodejs距离计算阻塞了我的服务器

在MYSQL中用2个坐标以米为单位计算地球距离的最佳方法是啥?

给定两组坐标,如何计算它们之间的距离?