2016-10-25 1 views
0

Ich habe vor mit GeoFire gearbeitet, und von dem, was ich mich erinnere, wenn Sie einen Ort mit setLocation in GeoFire speichern, ist die Firebase Struktur etwas wie folgt aus:Mit Geofire, wie machen Sie eine Abfrage auf eine nicht-konventionelle Knotenstruktur?

{ 
    "3f7892b2-f304-4129-8416-0dc7216c2188" : { 
    "g" : "9qc9p66045", 
    "l" : { 
     0 : 37, 
     1 : -120 
    } 
    } 
} 

Das Problem ist, ich habe bereits eine Echtzeit Datenbank und läuft, und es hat diese Struktur:

{ 
    "3f7892b2-f304-4129-8416-0dc7216c2188" : { 
    "username" : "bobby123", 
    "name" : "john", 
    "bio" : " I like dogs", 
    "location" : { 
     "lon" : 37, 
     "lat" : -120 
    } 
    } 
} 

So hat es andere Daten dort neben Lage (die ich zur Zeit bin mit CLLocation Speicher und Aktualisieren von Abkömmling-Wert nur).

Also meine Frage ist, was wäre die praktischste Möglichkeit, eine GeoFire-Abfrage auszuführen? Mir ist klar, dass ich einfach setLocation verwenden kann, die id durch die Benutzer-ID habe und später darauf referenziere, wenn ich die Benutzer in die Tabellenansicht lade, aber ich bin gespannt, ob es möglich ist, GFQuery auf meine Daten zu übertragen Es ist derzeit eingerichtet.

Antwort

0

Von dem, was ich weiß, Sie die erste Struktur zu verwenden, haben Sie erwähnt und dann, wenn Sie den Speicherort für einen Benutzer wollen:

geoFireRef!.getLocationForKey(userID, withCallback: { (location, error) in 
} 

oder was auch immer Sie nennen Ihre ref. dann rufen Sie an dieser Stelle eine Abfrage tun (zB einen 100 km Umkreis):

let locationQuery = geoFireRef!.query(at: location, withRadius: 100) 
locationQuery?.observe(GFEventType.init(rawValue: 0)!, with: {(key, location) in 
} 

Damit Sie die Schlüssel und damit die Benutzer mit einem usersRef.child (key) .observeSingleEvent (von: .value mit: {snapshot in

usw.

Von dem, was ich gelesen habe dies eine feste Struktur für GeoFire ist

.