投稿から現在のユーザーまでの距離で投稿を並べ替えようとしています。 私Firebaseデータベースは、次のようになります。Swift Firebase投稿からの距離投稿から
POST:
USER:
私はすでにこのコード
を使用して支払いすることによって、私の投稿をソートするために達成しましたvar REF_REQUESTS = Database.database().reference().child("requests")
func observeBestPaidRequests(completion: @escaping (Request) -> Void)
{
REF_REQUESTS.queryOrdered(byChild: "pay").observeSingleEvent(of: .value, with:
{
(snapshot) in
let arraySnapshot = (snapshot.children.allObjects as! [DataSnapshot]).reversed()
arraySnapshot.forEach(
{
(child) in
if let dict = child.value as? [String: Any]
{
let request = Request.transformRequest(dict: dict, key: snapshot.key)
completion(request)
}
})
})
}
しかし、私はこれを知らず、約1週間からこれを苦労しています。ユーザーと場所を使って遠く離れて並べ替える方法。
アイデア? 私は本当に答えを感謝します!
編集:私は、配列にそれを追加してのtableViewを再ロードしようとしているのViewControllerから
コード:
@objc func loadBestPaidRequests()
{
self.requests.removeAll()
Api.requestApi.observeBestPaidRequests
{
(request) in
guard let requesterId = request.uid
else
{
return
}
self.fetchUser(uid: requesterId, completed:
{
let requestLocation = CLLocation(latitude: request.latitude!, longitude: request.longitude!)
let distanceInMeters = requestLocation.distance(from: self.mapView.userLocation.location!)
let distanceInMetersUserFriendly = Double(round(1000*distanceInMeters/1000))
self.requests.append(request)
self.tableView.reloadData()
})
}
}
などのアカウントに移動する車両を取るために、この上で展開することができますユーザに提供される。 1つの解決策は、要求からのユーザーコードと着信コード間の距離を計算することです(Haversine?)。その距離をtableViewデータソースに追加し、距離距離で昇順にソートし、tableViewをリロードします。そうすると、リクエストを行った人物と、距離でソートされたユーザからの距離が表示されます。 – Jay
答えをありがとう、しかし、私はどのように正確に私はそれを距離で昇順に並べ替えるのですか? – Noah
配列myArray = [4,2,3,1]を使用すると、Swift配列ソート手法を使用できます。sortedArray = array.sorted {$ 0 <$ 1}。あなたがする必要があるのは、現在のユーザーコードx0、y0と着信要求コードx1、y1を取得し、距離を計算し、結果を配列に追加することだけです。その後、配列をソートし、tableViewをリロードします。 – Jay