2016-09-30 1 views
4

Ich habe folgende Firebase DatenbankstrukturFilter Firebase Datenbank basierend auf Ortsradius

"-KSupX7CppMD1zbqIy0y" : { 
    "addedByUser" : "zQpb7o18VzYsSoTQtT9DNhOqTUn2", 
    "content" : "Post 1", 
    "cost" : "20", 
    "duration" : "Weekly", 
    "latitude" : "40.7594479995956", 
    "longitude" : "-73.9838934062393", 
    "timestamp" : "Fri 30 Sep" 
}, 
"-KSuphuqO6a0lnrJYUkt" : { 
    "addedByUser" : "zQpb7o18VzYsSoTQtT9DNhOqTUn2", 
    "content" : "Post 2", 
    "cost" : "10", 
    "duration" : "Daily", 
    "latitude" : "40.7594329996462", 
    "longitude" : "-73.9846261181847", 
    "timestamp" : "Fri 30 Sep" 
} 

ich brauche die Pfosten innerhalb bestimmter Abstandsparameter (weniger als 50m, 100m, 150m & 200m) zum Filtern von I kann die erhalten Koordinate von der "Länge" & "Breite", aber ich kämpfe, um die Beiträge zu filtern. Jede Hilfe würde sehr geschätzt werden.

Vielen Dank im Voraus. Anfänger zu Firebase & Swift.

+1

Werfen Sie einen Blick auf Geofire: https://github.com/firebase/geofire-objc –

Antwort

0

Unten ist eine Lösung, die Sie versuchen könnten. Dies setzt voraus, dass Sie alle Posts von Firebase in die App geladen und in einem Array gespeichert haben. Sie könnten auch mit GeoFire arbeiten, die ich nicht persönlich benutzt habe (aber gerne). Ich glaube, es ermöglicht Ihnen, Firebase nach Standort abzufragen, so dass Sie nicht zuerst alle Beiträge auf das Gerät eines Benutzers herunterladen und auf der Client-Seite filtern müssen.

// assumes you have set up the app to get the user's current location 
var currentLocation: CLLocation? 

// Your array of posts downloaded from Firebase 
var postArray = [post]() 

let metersInTwentyFiveMiles = 40233.6 

// You could put this in viewDidAppear after you load the post array from Firebase 
for post in postArray { 

    var distanceInMeters: CLLocationDistance = 0 

    let postLocation = CLLocation(latitude: post.latitude, longitude: post.longitude) 


    if let currentLocation = self.currentLocation { 
     // Set distanceInMeters to the distance between the user's current location and the location of the post. 
     distanceInMeters = currentLocation.distanceFromLocation(postLocation) 
     // If this distance is not within 25 miles, remove this post from the array 
     if self.metersInTwentyFiveMiles < distanceInMeters { 
      self.posts = self.posts.filter{ $0 != post } 
     } 
    } 
} 
0

Für JSON wie folgt aus: -

UsersLocation :{ 
    autoID1 : {....}, 
    autoID2 : {.....} 
      } 

Try this: -

FIRDatabase.database().reference().child("UsersLocation").queryOrdered(byChild: "lat").queryStarting(atValue: 30).queryEnding(atValue: 60).observeSingleEvent(of: .value, with: {(snap) in 

     print(snap) 


     if let snapDict = snap.value as? [String:AnyObject]{ 

      for each in snapDict{ 

       print(each) 

      } 
     } 
    }) 
} 

Dies wird Ihnen alle Benutzer mit einem autoID Key, mit deren Breite zwischen 30 und 60 , Die Reihenfolge, in der Sie Daten abrufen, ist zufällig. Um sie in aufsteigender Reihenfolge zu durchlaufen, können Sie Ihr Wörterbuch, das Sie erhalten, sortieren.

+0

Akzeptieren Sie dies als Antwort, wenn es Ihr Problem gelöst hat :) Happy Coding – Dravidian

Verwandte Themen