从用户位置查找数组中最接近的经度和纬度 – iOS Swift

在这里发布的问题中,用户问:

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

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

作为回应,他得到了以下代码:

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

我在我正在处理的应用程序中遇到完全相同的问题,我认为这段代码可以完美地运行。 但是,我正在使用Swift,此代码在Objective-C中。

我唯一的问题是:它应该如何看待Swift?

谢谢你的帮助。 我是所有这一切的新手,看到Swift中的这段代码可能是一个很大的问题。

 var closestLocation: CLLocation? var smallestDistance: CLLocationDistance? for location in locations { let distance = currentLocation.distanceFromLocation(location) if smallestDistance == nil || distance < smallestDistance { closestLocation = location smallestDistance = distance } } print("smallestDistance = \(smallestDistance)") 

或作为一种function:

 func locationInLocations(locations: [CLLocation], closestToLocation location: CLLocation) -> CLLocation? { if locations.count == 0 { return nil } var closestLocation: CLLocation? var smallestDistance: CLLocationDistance? for location in locations { let distance = location.distanceFromLocation(location) if smallestDistance == nil || distance < smallestDistance { closestLocation = location smallestDistance = distance } } print("closestLocation: \(closestLocation), distance: \(smallestDistance)") return closestLocation } 

对于Swift 3,我创建了一小段“function”代码:

 let coord1 = CLLocation(latitude: 52.12345, longitude: 13.54321) let coord2 = CLLocation(latitude: 52.45678, longitude: 13.98765) let coord3 = CLLocation(latitude: 53.45678, longitude: 13.54455) let coordinates = [coord1, coord2, coord3] let userLocation = CLLocation(latitude: 52.23678, longitude: 13.55555) let closest = coordinates.min(by: { $0.distance(from: userLocation) < $1.distance(from: userLocation) }) 
  func closestLoc(userLocation:CLLocation){ var distances = [CLLocationDistance]() for location in locations{ let coord = CLLocation(latitude: location.latitude!, longitude: location.longitude!) distances.append(coord.distance(from: userLocation)) print("distance = \(coord.distance(from: userLocation))") } let closest = distances.min()//shortest distance let position = distances.index(of: closest!)//index of shortest distance print("closest = \(closest!), index = \(position)") }