web-dev-qa-db-fra.com

Comment interroger les GeoPoints les plus proches d'une collection dans Firebase Cloud Firestore?

Le nouveau Firestore DB me permet de stocker des GeoPoints. Existe-t-il un moyen d'interroger en fonction de ceux-ci?

Par exemple, si chacun de mes documents de collections a obtenu un champ location de type geopoint. Comment obtenir les 10 documents les plus proches d'une coordonnée arbitraire?

La documentation ne semble pas couvrir cela. J'ai essayé des trucs comme ça:

someRef.where('location', '>', geopoint).limit(10).get();

Évidemment, cela n'a pas beaucoup de sens, mais j'essaie juste des trucs ici ????

29
ProblemsOfSumit

Nous n'avons pas encore exposé les geoqueries, il n'y a donc actuellement aucun moyen de le faire.

Historiquement, la base de données en temps réel de Firebase utilisait geohashes dans une bibliothèque appelée GeoFire - mais étant donné que nous prévoyons d'exposer de véritables geoqueries dans un avenir proche, nous n'avons pas mis à jour cette bibliothèque à Firestore. Cependant, pour apprendre à faire quelque chose de similaire, jetez un œil à cette vidéo .

32
Mike McDonald

Un nouveau projet a été introduit depuis que @problemsofsumit a posé cette question pour la première fois. Le projet s'appelle GEOFirestore.

Avec cette bibliothèque, vous pouvez effectuer des requêtes comme des documents de requête dans un cercle:

  const geoQuery = geoFirestore.query({
    center: new firebase.firestore.GeoPoint(10.38, 2.41),
    radius: 10.5
  });

Vous pouvez installer GeoFirestore via npm. Vous devrez installer Firebase séparément (car il s'agit d'une dépendance entre pairs à GeoFirestore):

$ npm install geofirestore firebase --save

Vous pouvez y accéder via cdn: https://cdn.jsdelivr.net/npm/[email protected]/dist/geofirestore.min.js

7
ra9r

Vous pouvez laisser l'Algolia faire la recherche géographique avec rayon pour vous. Tout ce qu'il faudrait, c'est créer une fonction cloud qui se déclenche sur vos documents recherchés et les synchroniser avec Algolia.

Jetez un œil à Geo Search https://www.algolia.com/doc/guides/searching/geo-search/

La documentation Firebase présente également l'Algolia comme une solution aux recherches complexes ici https://firebase.google.com/docs/firestore/solutions/search

3
Troels Lenda

Plutôt que d'utiliser des services tiers comme Algolia, j'utiliserais la nouvelle bibliothèque qui est sortie pour iOS et Android qui reproduit GeoFire pour Firestore. La nouvelle bibliothèque, appelée GeoFirestore , est entièrement documenté et bien testé. J'ai déjà utilisé cette bibliothèque dans de nombreux projets de démonstration et elle semble fonctionner parfaitement. Essayez-la!

0
Nikhil Sridhar