我有一个充满经度和纬度的阵列。我的用户位置有两个双变量。我想测试用户在我的阵列上的位置之间的距离,以查看哪个位置最接近。我该怎么做?
这将获得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];
答案 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);
你能证实这是正确的吗?