Я хочу создать функцию, которая принимает в качестве параметров:Найти ближайшее расположение между coodinates пользователя и координирует массив
- Массив заполнены координаты
- Текущего местоположение пользователя
и вернуть ближайшего местоположения между местоположением пользователя и местоположениями массива.
Вот мои места:
let coord1 = CLLocation(latitude: 52.45678, longitude: 13.98765)
let coord2 = CLLocation(latitude: 52.12345, longitude: 13.54321)
let coord3 = CLLocation(latitude: 48.771896, longitude: 2.270748000000026)
пользователя функции местоположение:
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
var userLocation:CLLocation = locations[0]
let long = userLocation.coordinate.longitude;
let lat = userLocation.coordinate.latitude;
let coordinates = [ coord1, coord2, coord3]
userLocation = CLLocation(latitude: lat, longitude: long)
print("my location: \(userLocation)")
closestLocation(locations: coordinates, closestToLocation: userLocation)
}
Координаты Функция сравнения
func closestLocation(locations: [CLLocation], closestToLocation location: CLLocation) -> CLLocation? {
if let closestLocation: CLLocation = locations.min(by: { userLocation.distance(from: $0) < userLocation.distance(from: $1) }) {
let distanceMeters = userLocation.distance(from: closestLocation)
let distanceKM = distanceMeters/1000
print("closest location: \(closestLocation), distance: \(distanceKM)")
return closestLocation
} else {
print("coordinates is empty")
return nil
}
}
Это фактически не работает, и моя функция closestLocation
всегда возвращает огромное расстояние между двумя «ближайшими местоположениями».
Входные параметры
closestLocation(locations: coordinates, closestToLocation: userLocation)
Редактировать
Результат при печати closestLocation
и distanceKM
:
closest location: <+48.77189600,+2.27074800> +/- 0.00m (speed -1.00 mps/course -1.00) @ 14/01/2017 00:16:04 heure normale d’Europe centrale, distance: 5409.0
Как вы можете видеть, расстояние (в км) очень огромные, в то время как эти местоположения - один и тот же город.
Что вы получаете, когда вы печатаете 'location'? Также попробуйте распечатать 'distance' на каждой итерации, чтобы узнать, какие значения они есть. – TheAmateurProgrammer
Отредактировал вопрос всем, что вам нужно! –