Ich bin ziemlich neu mit Firebase und seiner Standortbibliothek GeoFire zu arbeiten. Momentan habe ich ein Problem bei der Strukturierung meiner Daten.GeoFire-Abfrage auf Benutzerstandort
Im Moment meine db ist so etwas wie folgt aus:.
users
facebook:xxxxx
displayName: xx
firstName: xx
lastName: xx
location:
g: xxxx
l:
0: xxx
1: xxx
facebook:yyyyy
displayName: yy
firstName: yy
lastName: yy
location:
g: yyyy
l:
0: yyy
1: yyy
Ich mag würde auf Benutzer abzufragen, angemeldet in der Nähe meiner aktuellen Benutzer sind zu tun, so kann ich nicht verstehen, welchen Weg ich muss angeben.
Im Moment bin ich wie dies zu tun (aber das funktioniert nicht):
aktuellen Standort
let root = Firebase(url: "myapp.firebaseio.com")
let usersRoot = root.childByAppendingPath("users")
geoFire = GeoFire(firebaseRef: usersRoot.childByAppendingPath(root.authData.uid))
geoFire.setLocation(currentLocation, forKey: "location") { (error) in
if (error != nil) {
print("An error occured: \(error)")
} else {
print("Saved location successfully!")
}
}
Abrufen von anderen Benutzern in der Nähe von
let geoFire = GeoFire(firebaseRef: Firebase(url: "myapp.firebaseio.com").childByAppendingPath("users"))
let query = geoFire.queryAtLocation(currentLocation, withRadius: radius)
query.observeEventType(GFEventTypeKeyEntered, withBlock: {
(key: String!, location: CLLocation!) in
print("+ + + + Key '\(key)' entered the search area and is at location '\(location)'")
self.userCount++
self.refreshUI()
})
Spar
UPDATE
Spar aktuelle Standort
let root = Firebase(url: "myapp.firebaseio.com")
geoFire = GeoFire(firebaseRef: root.childByAppendingPath("locations"))
geoFire.setLocation(currentLocation, forKey: root.authData.uid) { (error) in
if (error != nil) {
print("An error occured: \(error)")
} else {
print("Saved location successfully!")
}
}
Abrufen von anderen Benutzer in der Nähe von
let geoFire = GeoFire(firebaseRef: Firebase(url: "myapp.firebaseio.com").childByAppendingPath("locations"))
let query = geoFire.queryAtLocation(currentLocation, withRadius: radius)
query.observeEventType(GFEventTypeKeyEntered, withBlock: {
(key: String!, location: CLLocation!) in
print("+ + + + Key '\(key)' entered the search area and is at location '\(location)'")
self.userCount++
self.refreshUI()
})
Danke! Ich versuche gerade, aber immer noch nicht funktioniert. Ich habe versucht, auf diese Weise (Ihre db Struktur zu berücksichtigen): lassen geoFire = GeoFire (firebaseRef: root.childByAppendingPath ("user_locations")) let query = geoFire.queryAtLocation (Currentlocation, withRadius: 10) query.observeEventType (GFEventTypeKeyEntered, withBlock: { (Schlüssel: String !, location: CLLocation!) in print ("+ + + Schlüssel '\ (key)' in den Suchbereich eingegeben und ist am Standort '\ (location)'") }) – giacavicchioli
Gelöst, gab es ein Problem beim Festlegen der Abfrage-Center. Vielen Dank. – giacavicchioli
Firebase Geofire-js: wie man Liste der Schlüssel von nahe durch statische (örtlich festgelegte) Positionen erhält: http://stackoverflow.com/questions/43632746/firebase-geofire-js-how-to-get-list-of-keys -von-statischfixierten Standorten –