按从最近到最远的顺序对 Firestore GeoHash 查询进行排序?

Rai*_*lil 1 geolocation geohashing geofire google-cloud-firestore geofirestore

目前,我正在使用 GeoFirebase 库的部分内容以及 Firestore 来进行地理查询。当我设置帖子的 geohash 时,我是这样做的if let geoHash = GFGeoHash(location: location.coordinate).geoHashValue {

但是,为了使 geohash 查询不那么具体,我计划在查询时截断部分 geohash;目前,查询看起来与此类似

 var geoQuerySpecific = GFGeoHashQuery()
        let geoQueryHash =  GFGeoHashQuery.queries(forLocation: (lastLocation?.coordinate)!, radius: (30)) as! Set<GFGeoHashQuery>

        for query in geoQueryHash {
            geoQuerySpecific = query
            print("the key is this um \(geoQuerySpecific)")
        }
        print("the starting value is \(geoQuerySpecific.startValue)  and the end value is \(geoQuerySpecific.endValue)")
        let nearQuery = Firestore.firestore().collection("stuff").order(by: "g").whereField("g", isGreaterThanOrEqualTo: geoQuerySpecific.startValue).whereField("g", isLessThanOrEqualTo: geoQuerySpecific.endValue)
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,这将无法正常工作,因为 geoQueryHash 中有多个项目。当我在 firebase 中设置 geohash 时,我考虑过截断 geohash 的最后四位数字/字母,但是,这还不够具体。为了获得最接近的帖子,最好像我现在一样在数据库中设置 geoHashes,然后,在检索内容时,将起始值设置为查询的最具体的 geohash,然后将最终值设置为截断版本geohash,从获取最近的帖子开始并以最广泛的帖子结束?

我可以将 Firestore 查询限制为 50,这样我就可以检索从最近到最远的 50 个帖子...我对地理哈希的理解是否正确?这可行吗?

从概念上讲,如果有一种方法将 geohash 存储为整数,那么我可以使 firestore 查询从最大整数(即最精确的 Geohash)开始,然后按降序对查询进行排序,直到达到最不精确的强度(最广泛的 geoHash)然后将其限制为 50。

Fra*_*len 5

GeoFirestore 使用 geohashes 能够选择 geohashes 范围内的文档,该范围与地图上的区域大致相同。仅使用地理查询无法从该区域内按指定顺序检索这些文档。如果您想让文档按距离排序,则必须在应用程序代码中的地理查询之后执行此操作。

如果您想了解更多原因,请查看我之前的演讲:根据地理位置或距离查询 Firebase 和 Firestore。在其中,我解释了 geohashes 的工作原理、它们如何允许您选择特定地理范围内的文档,以及为什么不能在 Firestore(或 Firebase 的原始实时数据库)上执行更复杂的查询。