Показывать места в Firebase, когда пользователь рядом
Я пытаюсь, чтобы моя карта отображалась из Firebase в радиусе полумили от моего пользователя, но я еще не совсем там. Может ли кто-нибудь помочь?
Это то, что я делаю сейчас:
1) Заполните карту и tableView данными из моей базы данных Firebase в моем viewDidLoad:
var posts = [Post]()
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()
})
}
2) Тогда мой tableView настроен нормально: posts[indexPath.row], вытягивая из класса, который был специально создан для него.
Но, возвращаясь к проблеме, все местоположения обнаруживаются. Карта перенаселена всеми местами. Может ли кто-нибудь помочь!
1 ответ
Поэтому я не могу провести вас через код, так как я не разработчик IOS. Но для этого вам нужно создать какие-то геолокационные запросы.
В вашем случае вы хотите фильтровать данные по их радиусу. (круговой запрос)
Для этого вам нужно иметь центр (возможно, местоположение вашего пользователя или результат поиска местоположений) и расстояние от каждого местоположения до центра.
Если у вас есть это, то запрос будет выглядеть так:
if (distance <= radius) {
// location is in radius
}
Я только что создал библиотеку javaScript для этого, поэтому, возможно, это поможет вам (вы можете узнать, как рассчитать расстояние между двумя точками): https://github.com/Orlandster1998/geo-on-fire/blob/master/src/gof-utils.js#L215
или здесь документы: https://github.com/Orlandster1998/geo-on-fire/wiki/Basic-usage
Теперь, если у вас есть много данных для запроса, вам определенно следует использовать более продвинутый подход с геохэшингом.