В настоящее время я использую части библиотеки GeoFirebase вместе с Firestore, чтобы разрешить гео-запросы. Когда я устанавливаю геохэш поста, я делаю это так if let geoHash = GFGeoHash(location: location.coordinate).geoHashValue {
Однако, чтобы сделать запрос геохеша менее конкретным, я планирую обрезать часть геохеша при запросе; В настоящее время запрос выглядит примерно так:
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, однако, это не будет достаточно конкретным. Чтобы получить самые близкие сообщения, было бы лучше установить geoHashes в базе данных, как я в настоящее время, затем, при получении материала, сделайте начальное значение самым конкретным геохешем для запроса, а затем сделайте конечное значение усеченная версия геохеша, как начинать с получения ближайших постов и заканчивать самыми широкими?
Я могу ограничить запрос Firestore 50, так что тогда я могу получить 50 постов от ближайшего к дальнему ... верно ли мое понимание гео-хеширования? Это было бы возможно?
Концептуально, если бы был способ сохранить геохеши как целые числа, я мог бы сделать так, чтобы запрос firestore начинался с наибольшего целого числа (т. Е. Наиболее точного геохеша), а затем обрабатывал запрос по убыванию до тех пор, пока он не достигнет наименее точного намертеля ( самый широкий geoHash), а затем ограничить его до 50.