我正在尝试获取某个点范围内的文档。
观看视频并查看适用于 android 的地理哈希库,我能够获取边界框并获取必要的地理哈希以在 firebase 中进行查询。
例如:
点 -> LatLng(40.4378698,-3.8196205)
(西类牙马德里)
半径 -> 5000
米(5 公里)
我得到的边界框是:
[GeoHashQuery{startValue='ezjnh', endValue='ezjns'}, GeoHashQuery{startValue='ezjjs', endValue='ezjj~'}, GeoHashQuery{startValue='ezjq0', endValue='ezjq8'}, GeoHashQuery{startValue='ezjm8', endValue='ezjmh'}]
我有这个列表,我调用 Firebase 来检索“匹配”这个条件的文档:
fun getUpTos(queries: MutableSet<GeoHashQuery>, onSuccessListener: OnSuccessListener<QuerySnapshot>, onFailureListener: OnFailureListener) {
var reference = Firebase.firestore.collection("pois")
queries.forEach { entry ->
reference
.whereGreaterThanOrEqualTo("geohash", entry.startValue)
.whereLessThanOrEqualTo("geohash", entry.endValue)
}
reference.get()
.addOnSuccessListener(onSuccessListener)
.addOnFailureListener(onFailureListener)
}
此时我在 firebase 中有大约 20 个 Poi 可以开始进行测试。所有 Poi 都在巴塞罗那,1 个在马德里。
完成查询后,我得到了所有的 poi,而它应该只返回 Madrid poi。
我怎样才能只得到适合查询的点?似乎工作不正常(或者我做的明显不对)
是否可以实现这种类型的查询?
最佳答案
Is possible to achieve this type of querys?
是的,这是可能的。
当您遍历 queries
时MutableSet,在每次迭代中你都会创建一个新的 Query
目的。所以你不能简单地调用get()
只在循环外一次,并期望所有这些查询都能正常工作。相反,您可以做的是添加 get()
调用循环内的每个查询。结果对象的类型是 Task<QuerySnapshot>
.添加所有这些 Task
反对 List<Task<QuerySnapshot>>
.最后,将该任务列表传递给 Tasks 的 whenAllSuccess(Collection> tasks)。我在以下帖子的回答中解释的方法:
关于android - 在 Android 范围内的 Firetore 中查询 GeoHashes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57496574/