从用户位置查找阵列中最接近的经度和纬度

时间:2014-07-16 14:29:13

标签: ios objective-c mkmapview cllocationmanager cllocationdistance

我有一个充满经度和纬度的阵列。我的用户位置有两个双变量。我想测试用户在我的阵列上的位置之间的距离,以查看哪个位置最接近。我该怎么做?

这将获得2个位置之间的距离,但是要了解它们  我如何针对一系列地点进行测试。

CLLocation *startLocation = [[CLLocation alloc] initWithLatitude:userlatitude longitude:userlongitude];
CLLocation *endLocation = [[CLLocation alloc] initWithLatitude:annotation.coordinate.latitude longitude:annotation.coordinate.longitude];
CLLocationDistance distance = [startLocation distanceFromLocation:endLocation];

2 个答案:

答案 0 :(得分:3)

你只需要遍历数组来检查距离。

NSArray *locations = //your array of CLLocation objects
CLLocation *currentLocation = //current device Location

CLLocation *closestLocation;
CLLocationDistance smallestDistance = DOUBLE_MAX;

for (CLLocation *location in locations) {
    CLLocationDistance distance = [currentLocation distanceFromLocation:location];

    if (distance < smallestDistance) {
        smallestDistance = distance;
        closestLocation = location;
    }
}

在循环结束时,您将拥有最小的距离和最近的位置。

答案 1 :(得分:2)

@Fogmeister

我认为这是一个错误,必须正确设置DBL_MAX和分配。

首先:使用DBL_MAX而不是DOUBLE_MAX。

DBL_MAX是 math.h中的#define变量。
它是最大可表示有限浮点(双)数的值。

第二:在您的情况下,您的作业有误:

if (distance < smallestDistance) {
        distance = smallestDistance;
        closestLocation = location;
}

你必须这样做:

if (distance < smallestDistance) {
        smallestDistance = distance;
        closestLocation = location;
}

不同之处在于将距离值分配给smallestDistance,而不是相反。

最终结果:

NSArray *locations = //your array of CLLocation objects
CLLocation *currentLocation = //current device Location

CLLocation *closestLocation;
CLLocationDistance smallestDistance = DBL_MAX; // set the max value

for (CLLocation *location in locations) {
    CLLocationDistance distance = [currentLocation distanceFromLocation:location];

    if (distance < smallestDistance) {
        smallestDistance = distance;
        closestLocation = location;
    }
}
NSLog(@"smallestDistance = %f", smallestDistance);

你能证实这是正确的吗?