J'essaie de n'afficher que les annotations pour les emplacements les plus proches de mon utilisateur. J'ai tous les emplacements déjà enregistrés à Firebase et maintenant je suis juste en train de les récupérer et de remplir la Map et TableView avec seulement les emplacements autour de l'utilisateur. J'ai essayé GeoFire et quelques autres, mais je suis sûr que je ne fais pas bien. Quelqu'un pourrait-il aider?SEULEMENT Afficher les annotations pour les sites dans un rayon de
override func viewDidLoad() {
super.viewDidLoad()
// Set up Map
mapView.delegate = self
mapView.userTrackingMode = MKUserTrackingMode.follow
// Setup TableView
tableView.delegate = self
tableView.dataSource = self
//Pulls TableData for UITableView
DataService.ds.REF_VENUE.observe(.value, with: { (snapshot) in
self.posts = [] // THIS IS THE NEW LINE
if let snapshot = snapshot.children.allObjects as? [DataSnapshot] {
for snap in snapshot {
if let postDict = snap.value as? Dictionary<String, AnyObject> {
let key = snap.key
let post = Post(postKey: key, postData: postDict)
self.posts.append(post)
}
//Populates Map with annotations.
if let locationDict = snap.value as? Dictionary<String, AnyObject> {
let lat = locationDict["LATITUDE"] as! CLLocationDegrees
let long = locationDict["LONGITUDE"] as! CLLocationDegrees
let title = locationDict["NAME"] as! String
let center = CLLocationCoordinate2D(latitude: lat, longitude: long)
_ = MKCoordinateRegion(center: center, span: MKCoordinateSpan(latitudeDelta: 0.20, longitudeDelta: 0.20))
let annotation = MKPointAnnotation()
annotation.coordinate = CLLocationCoordinate2DMake(lat, long)
annotation.title = title.capitalized
self.mapView.addAnnotation(annotation)
}
}
}
self.tableView.reloadData()
})
}
Voici comment configurer ma table:
func tableView (_ tableView: UITableView, section numberOfRowsInSection: Int) -> Int { retour posts.count }
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if let cell = tableView.dequeueReusableCell(withIdentifier: "detailCell", for: indexPath) as? PostCell {
let cellData = posts[indexPath.row]
cell.configureCell(post: cellData)
return cell
} else {
return PostCell()
}
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let post = posts[indexPath.row]
performSegue(withIdentifier: "previewSegue", sender: post)
}
Épargnez-vous des valeurs lat et la longitude dans votre base de données de différents endroits? Si oui, vous pouvez faire votre résultat en utilisant des comparateurs comme obtenir toutes les données à la fois signifie tous les objets et maintenant définir une plage de la position actuelle de l'utilisateur et comparer cette portée aux objets dataSnapshot latitude et longitude et remplir les données –
Non ils sont au même endroit . –
J'ai mis à jour le code pour montrer comment je l'ai configuré –