2014-01-18 8 views
6

Hat jemand in Firebase versucht, Geocodes (z. B. lat/long) zu speichern und/oder zu suchen? Dies ist eine Funktionalität, die in MongoDB integriert ist und wenn ich Firebase für unser Backend verwenden möchte, muss ich wissen, wie ich dieses Szenario in Firebase behandeln würde.Umgang mit Geocodierung in Firebase?

Danke!

Antwort

7

Die Leute unter Firebase vor kurzem Open-Source eine Bibliothek, die Sie Standortdaten in Firebase speichern und abfragen können. Kurz gesagt, dies ist sehr einfach, da alle Schlüssel in Firebase Strings sind und Firebase startAt() und endAt() Abfragen unterstützt, mit denen Sie die entsprechenden Fenster für Geohashes und Bounding Boxes erstellen können.

Für Details und Verwendung der Implementierung, überprüfen Sie die live demos, source code, und ihre blog post auf GeoFire.

0

Hey, ich habe gerade eine Google-Karte in Echtzeit mit Firebase und GeoFire erstellt. GeoFire ist wirklich cool und einfach zu bedienen. Sie können Abfragen mit lon lat und radius durchführen. Es gibt einen Schlüssel zurück, mit dem Sie Ihre Firebase-Datenbank abfragen können. Sie legen beim Erstellen des GeoFire-Objekts den Schlüssel so fest, wie Sie möchten. Es ist normalerweise eine Referenz, die Sie verwenden können, um das Objekt zu erhalten, das dieser Entfernung zugeordnet ist. Hier

ist ein Link zu geoFire: https://github.com/firebase/geofire-js

Hier ist ein Beispiel Anwendungsfall:

Sie ein lon lat haben, dass Sie Navigator wurde mit:

var lon = '123.1232'; 
var lat = '-123.756'; 
var user = { 
    name: 'test user', 
    longitude: lon, 
    latitude: lat 
} 
usersRef.push(user).then(function(response) { 
    var key = response.key; 
    var coords = [lon, lat]; 
    geoFire.set(key, coords, function(success){ 
     console.log('User and geofire object has been created'); 
    }); 
}) 

Jetzt können Sie Abfrage für den Benutzer mit:

// Set your current lon lat and radius 
var geoQuery = geoFire.query({ 
    center: [latitude, longitude], 
    radius: radiusKm 
}); 
geoQuery.on('key_entered', function(key, location, distance) { 
    // You can now get the user using the key 
    var user = firebaseRefUrl + '/' + key; 

    // Here you can create an array of users that you can bind to a scope in the controller 
}); 

Wenn Sie verwenden Google Maps. Ich empfehle Ihnen eckige Google Maps. Es ist eine wirklich coole Google Maps-Direktive, die eine Reihe von Markierungen und Kreisen aufnimmt. Wenn sich also $ scope.markers oder $ scope.circles im Controller ändern, wird es automatisch auf die Karte ohne irgendeinen unordentlichen Code angewendet. Sie haben eine sehr gute Dokumentation.

Hier ist ein Link: http://angular-ui.github.io/angular-google-maps/