firebase - example - firestore where
¿Hay alguna manera de usar GeoFire con Firestore? (6)
GeoFire está estrechamente acoplado a la base de datos en tiempo real, mientras que las consultas geográficas son una dependencia funcional común de muchas aplicaciones que buscan migrar a Firestore. ¿Hay alguna forma de replicar el hash / recuperación de ubicaciones en el entorno Firestore?
Cloud Firestore admite de forma nativa puntos geográficos.
Ver los
tipos de datos
compatibles.
Y encontrará la clase
GeoPoint
que puede usar para establecer datos y también consultarla:
query.whereEqualTo("location", GeoPoint(lat, long))
La solución Javascript para GeoQuery con Firestore es usar GeoFirestore como dijo Nikhil Sridhar. Pero es bastante difícil de usar (o fue para mí).
En primer lugar, debe inicializar una referencia de GeoFirestore.
var firebase = require(''firebase-admin'');
var GeoFirestore = require(''geofirestore'');
// Create a Firestore reference
const firestore = firebase.firestore();
// Create a GeoFirestore reference
const geofirestore = new GeoFirestore.GeoFirestore(firestore);
// Create a collection reference but using geofirestore collections
// this is where you save the geofirestore documents with its structure
const geocollection = geofirestore.collection(''userPositions'');
Después de inicializar su colección, el primer paso es guardar un documento con la estructura especificada
{
g: string;
l: GeoPoint;
d: DocumentData;
}
geofirestore.collection(''userPositions'').doc(id).set({ coordinates: new firebase.firestore.GeoPoint(0, 0)}).then(res => {
return res;
}).catch(err => {
console.log(err);
});
Solo cuando tenga su colección con documentos de geofirestore, puede consultar sobre ellos como se indica en el ejemplo.
// Create a GeoQuery based on a location
const query = geocollection.near({ center: new firebase.firestore.GeoPoint(0, 0), radius: 1000 });
// Get query (as Promise)
query.get().then((value) => {
console.log(value.docs); // All docs returned by GeoQuery
});
Espero que estos pasos te ayuden!
Se ha introducido un nuevo proyecto desde que el póster original hizo esta pregunta por primera vez. El proyecto se llama GEOFirestore.
Con esta biblioteca puede realizar consultas como documentos de consulta dentro de un círculo:
const geoQuery = geoFirestore.query({
center: new firebase.firestore.GeoPoint(10.38, 2.41),
radius: 10.5
});
Puede instalar GeoFirestore a través de npm. Tendrá que instalar Firebase por separado (porque es una dependencia entre pares de GeoFirestore):
$ npm install geofirestore firebase --save
UNA GRAN NOTICIA. Ahora hay una biblioteca para iOS y Android que replica GeoFire para Firestore. La biblioteca se llama github.com/imperiumlabs/GeoFirestore . Tiene documentación completa y está bien probado. Actualmente lo uso en mi aplicación y funciona de manera brillante. El código es muy similar al de GeoFire, por lo que solo debe tomar unos minutos para aprender.
Una solución que viene a la mente es agregar la base de datos en tiempo real solo para consultas geográficas y sincronizar las dos bases de datos con Cloud Functions, al igual que Google sugiere con presence .
En mi caso, ni siquiera es necesario sincronizar mucho; Solo mantengo una lista de uids con sus ubicaciones en la base de datos en tiempo real y hago todas las geo-consultas allí.
Editar (1 de julio de 2019): cuando originalmente escribí la respuesta a continuación, estaba optimista de que las consultas geográficas nativas llegarían pronto a Cloud Firestore, lo que claramente no sucedió. Todavía está en los planes a largo plazo, pero por ahora la mejor opción es usar una biblioteca construida por la comunidad o hacer la suya propia usando GeoHashes o la biblioteca de Geometría S2 .
Las bibliotecas GeoFire para Realtime Database se crearon utilizando GeoHashes y portar la lógica de esas bibliotecas a Cloud Firestore debería ser relativamente simple.
Sam del equipo de Cloud Firestore aquí. Como dijo SUPERCILEX, Cloud Firestore ya tiene soporte para el tipo de datos GeoPoint. Estamos trabajando arduamente para llevar consultas geográficas nativas al producto.
Debido a que están llegando consultas geográficas nativas, no trasladaremos GeoFire a Cloud Firestore. En su lugar, redirigiremos ese esfuerzo de ingeniería para obtener las consultas nativas antes.
Si necesita consultas geográficas hoy y no quiere construir su propia biblioteca, ¡quédese con la base de datos en tiempo real!