在Android范围内的FireStore中查询GeoHash
我想得到的是在一个点范围内的文档 在观看视频之后,并查看android的geo hash库,我能够获得边界框,并获得在firebase中查询所需的geo hash 例如: 点->在Android范围内的FireStore中查询GeoHash,android,firebase,google-cloud-firestore,geohashing,Android,Firebase,Google Cloud Firestore,Geohashing,我想得到的是在一个点范围内的文档 在观看视频之后,并查看android的geo hash库,我能够获得边界框,并获得在firebase中查询所需的geo hash 例如: 点->LatLng(40.4378698,-3.8196205)(西班牙马德里) 半径->5000米(5公里) 我得到的边界框是: [GeoHashQuery{startValue='ezjnh', endValue='ezjns'}, GeoHashQuery{startValue='ezjjs', endValue='ez
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)
}
fun getUpTos(查询:可变表集、onSuccessListener:onSuccessListener、onFailureListener:onFailureListener){
var reference=Firebase.firestore.collection(“POI”)
querys.forEach{entry->
参考
。其中,大于或等于(geohash,entry.startValue)
。其中sthanorequalto(“geohash”,entry.endValue)
}
reference.get()
.addOnSuccessListener(onSuccessListener)
.addOnFailureListener(onFailureListener)
}
现在我在firebase有大约20个Poi要开始做测试。所有的Poi都在巴塞罗那,1个在马德里
在做了这个查询之后,我得到了所有的poi,而它应该只是返回马德里poi
如何仅获取适合查询的POI?它似乎工作不正常(或者我显然做错了什么)
有可能实现这种类型的查询吗
有可能实现这种类型的查询吗
是的,这是可能的
在迭代查询
可变表集时,每次迭代都会创建一个新的查询
对象。因此,您不能只在循环外调用一次get()
,并期望所有这些查询都能正常工作。相反,您可以做的是向循环中的每个查询添加get()
调用。结果为的对象的类型。将所有这些任务
对象添加到列表
。最后,将任务列表传递给tasks的方法,如我在以下帖子中的回答所述: