swift firebase firebase-database cllocation

Swift-Ordenando por la ubicación más cercana de los datos extraídos de Firebase DB



firebase-database cllocation (1)

Estoy intentando recuperar datos de mi backbase de firebase: cada entrada tiene un nombre de usuario, lat y long. Al mirar otras preguntas de stackoverflow, veo que se supone que CoreLocation ordena por ubicación más cercana con su distancia desde el método (o más bien, distancia (desde :)), que traté de usar. No parece funcionar como se esperaba. Me pregunto qué estoy haciendo mal.

import UIKit import Firebase import FirebaseDatabase import MapKit import CoreLocation class RequestVC: UITableViewController, CLLocationManagerDelegate { var locationManager = CLLocationManager() var sellerUserNames = [String]() var requestLocations = [CLLocationCoordinate2D]() override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if segue.identifier == "backToMain" { self.navigationController?.navigationBar.isHidden = true } } override func viewDidLoad() { super.viewDidLoad() locationManager.delegate = self locationManager.desiredAccuracy = kCLLocationAccuracyBest locationManager.requestWhenInUseAuthorization() locationManager.startUpdatingLocation() let databaseRef = FIRDatabase.database().reference() databaseRef.child("Sell_Request").observe(FIRDataEventType.childAdded, with: { (FIRDataSnapshot) in if let data = FIRDataSnapshot.value as? NSDictionary { if let name = data[Constants.NAME] as? String { if let lat = data["latitude"] as? Double { if let long = data["longitude"] as? Double { print("/(self.sellerUserNames) Location: Latitude: /(lat), Longitude: /(long)") self.sellerUserNames.append(name) self.requestLocations.append(CLLocationCoordinate2D(latitude: lat, longitude: long)) self.tableView.reloadData() } } } } }) } func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { } override func numberOfSections(in tableView: UITableView) -> Int { return 1 } override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return sellerUserNames.count } override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) let location = locationManager.location?.coordinate let buyerLocation = CLLocation(latitude: (location?.latitude)!, longitude: (location?.longitude)!) let sellerLocation = CLLocation(latitude: requestLocations[indexPath.row].latitude, longitude: requestLocations[indexPath.row].longitude) let distance = buyerLocation.distance(from: sellerLocation) / 1000 let roundedDistance = round(distance * 100) / 100 let distanceInMiles = roundedDistance * 0.621 let roundedDistanceInMiles = round(distanceInMiles * 1000) / 1000 cell.textLabel?.text = sellerUserNames[indexPath.row] + " - /(roundedDistanceInMiles) miles away" return cell } }


Podría intentar hacer que GeoFire funcione. No funciona con cocoapods, aunque hay soluciones provisionales.