как получить ближайших пользователей (из базы данных firebase) из моего местоположения с помощью Firestore? - PullRequest
0 голосов
/ 07 мая 2020

в моей базе данных Firestore У меня есть таблица пользователей, в которой есть пользователи с подробностями и их GeoPoint.

Я хочу, чтобы пользователи находились поблизости от моего местоположения в GMSCoordinateBounds, проверяя, находится ли пользователь из базы данных в моих границах или нет.

, если вы хотите добавить комментарий к вопросу.

в настоящее время я делаю это, но не получаю правильных результатов: -

    let visibleRegionn = mapView.projection.visibleRegion()
    let bounds = GMSCoordinateBounds(region: visibleRegionn)
    // we've got what we want, but here are NE and SW points
    let northEast = bounds.northEast
    let southWest = bounds.southWest

    let geopoint1 = GeoPoint(latitude: northEast.latitude, longitude: northEast.longitude)
    let geopoint2 = GeoPoint(latitude: southWest.latitude, longitude: southWest.longitude)


    let docRef = Firestore.firestore().collection("Users")
    let query =
        docRef
        .whereField("locationGeopoint", isLessThanOrEqualTo: geopoint1)
        .whereField("locationGeopoint", isLessThanOrEqualTo: geopoint2)

    query.getDocuments { snapshot, error in
        if let error = error {
            print("Error getting documents: \(error)")
        } else {
            for document in snapshot!.documents {
                self.arrListMapData.append(document.data() as NSDictionary)
            }

       }
    }

1 Ответ

1 голос
/ 07 мая 2020

Я думаю, что код может работать, но в вашем коде может быть логическая ошибка.

let visibleRegionn = mapView.projection.visibleRegion()
let bounds = GMSCoordinateBounds(region: visibleRegionn)
// we've got what we want, but here are NE and SW points
let northEast = bounds.northEast
let southWest = bounds.southWest

let geopoint1 = GeoPoint(latitude: northEast.latitude, longitude: northEast.longitude)
let geopoint2 = GeoPoint(latitude: southWest.latitude, longitude: southWest.longitude)


let docRef = Firestore.firestore().collection("Users")
let query =
    docRef
    .whereField("locationGeopoint", isLessThan: geopoint1)
    .whereField("locationGeopoint", isGreaterThan: geopoint2)

query.getDocuments { snapshot, error in
    if let error = error {
        print("Error getting documents: \(error)")
    } else {
        for document in snapshot!.documents {
            self.arrListMapData.append(document.data() as NSDictionary)
        }

   }
}

Если вы видите, что у вас было - isLessThanOrEqualTo в обоих местах, что на самом деле не даст вам правильных результатов. Вам нужен диапазон, поэтому теперь вы хотите найти всех пользователей в этом диапазоне, поэтому вам нужно использовать что-то вроде - isLessThan и isGreaterThan.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...