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

我有一个经度和纬度丰富的arrays。 我有两个双重variables与我的用户位置。 我想testing我的用户位置与我的arrays之间的距离,以查看哪个位置是最接近的。 我该怎么做呢?

这将获得2个位置之间的距离,但拼图理解我将如何对arrays的位置进行testing。

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]; 

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

 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; } } 

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

@Fogmeister

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

第一:使用DBL_MAX而不是DOUBLE_MAX。

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

第二:在你的情况下,你的任务是错误的:

 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); 

你能证实这是正确的吗?