Найти ближайшую долготу и широту в массиве из местоположения пользователя и массива сортировки, соответствующего кратчайшему расстоянию от одного до другого широта - PullRequest
0 голосов
/ 25 сентября 2018

У меня есть массив с длиной long, и я хочу отсортировать массив, как алгоритм dijkstra (чтобы найти кратчайшее расстояние от одного до другого местоположения)

for i in 0..<(dataArray - 1) {
    let coordinate1 = CLLocation(latitude: (dataArray[i] as AnyObject).value(forKey: "addressLatitude") as! CLLocationDegrees, longitude:  (dataArray[i] as AnyObject).value(forKey: "addressLongitude") as! CLLocationDegrees)
    let coordinate2 = CLLocation(latitude: (dataArray[i+1] as AnyObject).value(forKey: "addressLatitude") as! CLLocationDegrees, longitude:  (dataArray[i+1] as AnyObject).value(forKey: "addressLongitude") as! CLLocationDegrees)

    var distance: CLLocationDistance? = nil
    distance = coordinate1.distance(from: coordinate2)
    let kilometers = CLLocationDistance((distance ?? 0.0) / 1000.0)
    print(kilometers)
}

1 Ответ

0 голосов
/ 25 сентября 2018

Прежде всего самый короткий должен относиться к определенной точке, поэтому, когда вы говорите, самый короткий, давайте предположим, что вы говорите о текущем местоположении пользователя, поэтому в следующем коде я опишу, предполагая, что естьпеременная var userLocation: CLLocation

    let sorted = dataArray.sorted{ (a, b) -> Bool in
    let coordinate1 = CLLocation(latitude: a["addressLatitude"] as! CLLocationDegrees, longitude: a["addressLongitude"] as! CLLocationDegrees)
    let coordinate2 = CLLocation(latitude: b["addressLatitude"] as! CLLocationDegrees, longitude: b["addressLongitude"] as! CLLocationDegrees)
    return coordinate1.distance(self.userLocation) > coordinate2.distance(self.userLocation)
}

, где let sorted сортирует ваш массив данных.

...