Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

217
Vistas
cómo ordenar datos por geohash en firestore v9 y cómo funciona la consulta de geohash

¿Cómo clasifico los datos por geohash en firestore v9? Los documentos de V8 dan este ejemplo:

 const bounds = geofire.geohashQueryBounds(center, radiusInM); const promises = []; for (const b of bounds) { const q = db.collection('cities') .orderBy('geohash') .startAt(b[0]) .endAt(b[1]); promises.push(q.get()); } // Collect all the query results together into a single list Promise.all(promises).then((snapshots) => { const matchingDocs = []; for (const snap of snapshots) { for (const doc of snap.docs) { const lat = doc.get('lat'); const lng = doc.get('lng'); // We have to filter out a few false positives due to GeoHash // accuracy, but most will match const distanceInKm = geofire.distanceBetween([lat, lng], center); const distanceInM = distanceInKm * 1000; if (distanceInM <= radiusInM) { matchingDocs.push(doc); } } } return matchingDocs;

No se como traducirlo a V9, he probado asi:

 const { latitude, longitude } = location?.coords || {}; if (latitude && longitude) { const radiusInM = 50 * 100000; const center = [latitude, longitude]; const bounds = geofire.geohashQueryBounds(center, radiusInM); for (const b of bounds) { const q = query( collection(firestore, "laboratories"), orderBy("geoHash"), startAt(b[0]), endAt(b[1]) ); const querySnapshot = await getDocs(q); querySnapshot.forEach((doc) => { console.log(doc.id, " => ", doc.data()); }); } }

Pero no devuelve ningún resultado, ¿cómo funcionan esas consultas, porque en los resultados de los límites cuando configuro el radio en 50 * 100 obtengo 4 matrices con hashes, supongo que esos son puntos en un mapa?

 0: (2) ['u3j', 'u3k'] 1: (2) ['u3n', 'u3p'] 2: (2) ['u3m', 'u3n'] 3: (2) ['u3q', 'u3r']

sin embargo, cuando aumento el radio de búsqueda a 50 * 100000, solo obtengo

 0: (2) ['h', '~']

No entiendo donde me equivoco, uno de esos lugares esta intencionalmente muy cerca de donde estoy. Y suponiendo que esta búsqueda fuera exitosa, ¿devolvería solo ubicaciones en el área o se ordenarían? ¿Quizás debería usar alguna biblioteca adicional para eso? ¿Me recomendarías uno, por favor? ¿Y debo almacenar la latitud y la longitud junto con geohashes o esto sería suficiente?

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Publicar los comentarios de Frank para mayor visibilidad.

Su traducción a la sintaxis v9 se ve bien, pero tiene un error tipográfico en el nombre del campo aquí: orderBy("geoHash") , debe reemplazarse con orderBy("geohash") , con una h minúscula en hash .

El campo geohash es un valor de cadena, no un tipo de datos específico. Es posible que desee consultar el artículo sobre geohashes o ver un video al respecto.

Para reiterar, el problema en su código aquí es que escribió mal el nombre del campo en su segunda consulta/v9, ya que deletreó geoHash de manera diferente que en la primera consulta/v8. Incluso si elimina las cláusulas startAt / endAt , no obtendrá resultados, ya que ningún documento tiene un campo con ese nombre mal escrito.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda