【发布时间】:2019-05-20 00:14:23
【问题描述】:
目前,我正在使用部分 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)
如您所见,这将无法正常工作,因为 geoQueryHash 中有多个项目。当我在firebase中设置geohash时,我考虑过截断geohash的最后四个数字/字母,但是,这还不够具体。为了获得最近的帖子,最好像我现在一样在数据库中设置geoHashes,然后,在检索内容时,将起始值设为查询的最具体的geohash,然后将结束值设为geohash 的截断版本,从获取最近的帖子开始,以最广泛的帖子结束?
我可以将 Firestore 查询限制为 50,这样我就可以检索从最近到最远的 50 个帖子...我对地理散列的理解是否正确?这可行吗?
从概念上讲,如果有一种方法可以将 geohashes 存储为整数,那么我可以让 firestore 查询从最大整数(即最精确的 Geohash)开始,然后通过降序对查询进行排序,直到它达到最不精确的强度(最广泛的geoHash),然后将其限制为50。
【问题讨论】:
标签: geolocation google-cloud-firestore geofire geohashing geofirestore