Я пытаюсь получить документы, которые находятся в пределах допустимого диапазона.
Просматривая видео и просматривая библиотеку геохешей для Android, я могу получить ограничивающую рамку и получить необходимые геохеши для запроса в firebase.
В качестве примера:
Point -> LatLng(40.4378698,-3.8196205)
(Мадрид, Испания)
Радиус -> 5000
meter (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)
}
На данный момент у меня есть около 20 Пои в базе, чтобы начать тест. Все Пои находятся в Барселоне и один - в Мадриде.
После выполнения запроса я получаю ВСЕ пои, тогда как предполагалось, что он просто вернет мадридские пои.
Как я могу получить только те точки, которые соответствуют запросу? Кажется, не работает должным образом (или я явно что-то делаю не так)
Можно ли выполнить этот тип запросов?