GeoFire не показывает введенный регион быстро - PullRequest
0 голосов
/ 06 ноября 2018

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

Цель: Все, что я хочу, - это выводить на консоль все сообщения, которые находятся в радиусе 10 км от местоположения текущего пользователя.

Проблемы: Я не совсем понимаю, какие параметры нужно поместить в geoFire.setLocation местоположение пользователя или местоположение поста. Документация показывает только введенные вручную координаты. Я хочу вытащить мой из базы Firebase и запросить его, когда пользователь проходит в 10 км, они выводятся на консоль. В настоящее время с кодом у меня ничего не печатается вообще.

fileprivate func setupGeoFireLocation() {

    let ref = Database.database().reference(withPath: "posts")
    ref.observe(.childAdded, with: { (snapshot) in

        guard let dictionary = snapshot.value as? [String: Any] else { return }

        guard let latitude = dictionary["latitude"] as? String else { return }
        guard let longitude = dictionary["longitude"] as? String else { return }

        let postLat = (latitude as! NSString).doubleValue
        let postLon = (longitude as! NSString).doubleValue


        self.geoFire.setLocation(CLLocation(latitude: postLat, longitude: postLat), forKey: "posts")
        //Not quite sure what's meant to be the "forKey:" parameter.

})
}

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    let userLocation: CLLocation = locations[0] as CLLocation

    ref = Database.database().reference()
    geoFire = GeoFire(firebaseRef: ref)

    let center = CLLocation(latitude: userLocation.coordinate.latitude, longitude: userLocation.coordinate.longitude)
     let circleQuery = geoFire.query(at: center, withRadius: 10.0)
    _ = circleQuery.observe(.keyEntered, with: { (key, location) in
        print(key)
    })

    circleQuery.observeReady{
        print("All initial data has been loaded and events have been fired for circle query!")
    }
}

Firebase Database

1 Ответ

0 голосов
/ 06 ноября 2018

Из ваших комментариев кажется, что вы никогда специально не устанавливали информацию о местоположении с помощью метода setLocation GeoFire. Для того, чтобы GeoQueries работал, вам нужно также указать местоположение в GeoFire. Он не будет просто работать из ваших существующих значений lat и lon.

GeoFire запрашивает отдельное местоположение, где оно связывает ключи с геохэшами информации о местоположении. Пожалуйста, следуйте документации GeoFire по установке местоположения для ключа , извлечению местоположения и запросу .

Я также рекомендую прочитать эти вопросы, которые объясняют больше о GeoFire и как он работает:

...