从用户位置查找最接近的经度和纬度
我有一个经度和纬度丰富的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);
你能证实这是正确的吗?