Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

212
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!