两个地理位置之间的距离

如何获得给定两个地理点(两个经度/纬度对)的精确距离(以米为单位)?

可能重复:

两个GEO位置之间的距离

计算地理位置的距离

Android计算两个位置之间的距离

如何从两个位置的经度和纬度找到距离?


如果你想从两个坐标得到距离,你可以使用这个片段:

#include <math.h>
#define DEG2RAD(degrees) (degrees * 0.01745327)
#define RADIUS_OF_EARTH 6378.1

+ (float) getDistanceFromStartCoords:(CLLocationCoordinate2D)start andEndCoords:(CLLocationCoordinate2D)end 
{
    float dist = acos((cos(DEG2RAD(start.latitude))*
                 cos(DEG2RAD(end.latitude))*
                 cos((-1*DEG2RAD(end.longitude))-
                     (-1*DEG2RAD(start.longitude)))) +
              (sin(DEG2RAD(start.latitude))*
               sin(DEG2RAD(end.latitude)))) * 
            RADIUS_OF_EARTH;

    return dist;
}

iPhone上没有距离测量功能,可以给你2米的分辨率。 您可以使用核心位置的-[CLLocation distanceFromLocation: otherLocation]方法在两个位置之间获得以米为单位的位移,但请记住:

  • 我见过的任何地方,苹果公司都解释了什么是用于坐标的geode,事实上它是否是用于不同位置估算的同一个geode
  • 他们使用的模型没有考虑到高度,这对于计算现场大小的区域中人尺寸物体之间的距离非常不利。 尽管估算伦敦和莫斯科之间的距离没有问题,但错误很小。
  • 当您的设备未插入时,使用真正高精度的位置数据与移动侦测相结合将会完全吸引电池
  • 如果不使用运动检测,则只能告诉设备在几十米范围内的位置。

  • 这是对上述解决方案的“改进”。 它增加了高度信息。 看起来苹果返回的高度以米为单位。 不适合飞行或轨道或类似的情况,但如果有人在另一个人的正上方15层,附近的山上等,则可以工作。未经广泛测试。 它假定你不关心20公里以外的高度。 然后,当您靠近另一个人时,它会进行高度更正。 因此,对于距离彼此20米,但高100米的两个人,你会得到约102米的距离。 最后,我切换到公里返回。 还在原始代码中发现了一个南方虫。

    #define DEG2RAD(degrees) (degrees * 0.01745329251)
    #define RADIUS_OF_EARTH 6371000.0
    // km
    + (double)getDistanceFromStartCoords:(CLLocationCoordinate2D)start altStart:(double)altStart andEndCoords:(CLLocationCoordinate2D)end altEnd:(double)altEnd;
    {
        double argument = (cos(DEG2RAD(start.latitude))*
                     cos(DEG2RAD(end.latitude))*
                     cos((-1*DEG2RAD(end.longitude))-
                         (-1*DEG2RAD(start.longitude)))) +
                  (sin(DEG2RAD(start.latitude))*
                   sin(DEG2RAD(end.latitude)));
    
        double dist = 0.0;
        if (argument < 1.0 && argument > -1.0) // acos will return nan for very small (0) distance
            dist = acos(argument)*RADIUS_OF_EARTH;
    //    else
    //        NSLog(@"found bug, %f", acos(argument));
    
    
        // Altitude hack.
        // blend in an altitude correction (blend for smoothness)
        // add in altitude difference
        double altDiff = fabs(altStart - altEnd); // altdiff
        double factor = 1.0 - dist/20000.0;
        if (factor < 0.0)
            factor = 0.0;
    
        dist += sqrt(dist*dist + factor*altDiff*altDiff);
    
        //NSLog(@"distance found, %f", dist);
        return dist/1000.0; // return km
    }
    
    链接地址: http://www.djcxy.com/p/70971.html

    上一篇: Distance between two geo

    下一篇: Calculate second point knowing the starting point and distance