2016-07-26 8 views
0

Ich habe eine Liste von Restaurants, von denen jedes einen festen Standort hat, der in GeoFire gespeichert ist. Jetzt möchte ich die Restaurants in einem festen Radius des Benutzerstandortes anzeigen. Wie kann ich dies mit GeoFire erreichen? Die Dokumentation hier, , schlägt meistens Lösungen vor, in denen sich Geofire-Schlüssel bewegen, die mit key_entered, key_exited usw. behandelt werden. Ich bin jedoch nicht in der Lage herauszufinden, wie ich auf die Schlüssel in der Nähe zugreifen kann.Liste der Restaurants in der Nähe des Benutzers mit Firebase-GeoFire erreichen

Mein Controller-Code wie folgt aussieht:

var ref = firebase.database().ref(); 
var geoFire = new GeoFire(ref.child("geofire")); 
var posOptions = {timeout: 10000, enableHighAccuracy: false}; 
$cordovaGeolocation.getCurrentPosition(posOptions).then(function (position) { 
$scope.rest= []; 
$scope.filteredRest = []; 
var geoQuery = geoFire.query({ 
    center: [position.coords.latitude, position.coords.longitude], 
    radius: 15 
}); 
geoQuery.on("key_entered", function(key, location, distance) { 
    console.log(key); 
    $scope.filteredRest.push(key); 
}); 
geoQuery.on("ready", function() { 
    geoQuery.cancel(); 
}); 
console.log($scope.filteredRest); 

Der Schlüssel auf der Konsole gedruckt wird, ist aber nicht beschränkt auf filteredRest Array geschoben.

Ich suche ‚Beispiel für die Verwendung‘ in folgenden Link zu erreichen: https://github.com/firebase/geofire-java#example-usage

Es gibt ähnliche Fragen, aber die meisten von ihnen sind in ios/schnell und die Antworten sind nicht sehr informativ. Ich benutze GeoFire-JavaScript. Jede Hilfe wäre willkommen.

+0

Das Ereignis 'key_entered' wird auch für nicht bewegliche Schlüssel ausgelöst. Es wird "sofort" für alle Tasten im Bereich und dann für jede Taste ausgelöst, die in den Bereich eintritt. Hast du schon etwas probiert? –

+0

Okay, aber kann ich damit auf alle Schlüssel zugreifen, für die das Ereignis ausgelöst wurde? Nicht genau, was eine GeoCallbackRegistration ist, die zurückgegeben wird. – Sagar

+0

Sie müssen eine Sammlung von Schlüsseln erstellen, indem Sie 'key_entered' einhängen. Wenn Sie wissen möchten, wann alle * Initial * -Schlüssel ausgelöst wurden, können Sie das Ereignis 'ready' anhängen: https://github.com/firebase/geofire-js/blob/master/docs/reference.md#geoqueryoneventtype -callback –

Antwort

2

Um zu behandeln, wenn alle anfänglichen Schlüssel synchronisiert sind, legen Sie den Code in den ready Handler. Angenommen, Sie möchten alle Initialtasten drucken:

var ref = firebase.database().ref(); 
var geoFire = new GeoFire(ref.child("geofire")); 
var posOptions = {timeout: 10000, enableHighAccuracy: false}; 
$cordovaGeolocation.getCurrentPosition(posOptions).then(function (position) { 
$scope.rest= []; 
$scope.filteredRest = []; 
var geoQuery = geoFire.query({ 
    center: [position.coords.latitude, position.coords.longitude], 
    radius: 15 
}); 
geoQuery.on("key_entered", function(key, location, distance) { 
    $scope.filteredRest.push(key); 
}); 
geoQuery.on("ready", function() { 
    geoQuery.cancel(); 
    console.log($scope.filteredRest); 
}); 
+0

Das war einfach! Danke für die Hilfe! Du bist MVP! – Sagar

+0

Hey Leute, ich will nicht unhöflich sein, aber ich versuche etwas ganz Ähnliches zu machen und ich kann es nicht regeln, könntest du mir meinen Beitrag ansehen? http://stackoverflow.com/questions/42462088/geofire-doesn-return-the-result – FrenchyNYC

+0

Ist es in Javascript möglich? Suchen von Schlüsseln (Liste von Schlüsseln) in der Nähe von statischen (festen) Standorten - die im Firebase-Datenspeicher bereits hinzugefügt wurden. Hinweis: 'key_entered' wird nicht verwendet, da 'key_entered' nur ausgelöst wird, wenn sie neu oder aktualisiert ist. Was ist mit zuvor hinzugefügten Standorten, aber unter einem gegebenen Radius? Wie ist es möglich ?? –