Geofire возвращает дубликаты ключей при расширении радиуса в Swift - PullRequest
0 голосов
/ 21 ноября 2018

Я пытаюсь реализовать бесконечную прокрутку, увеличив радиус моего запроса GeoFire на 5 км, чтобы я мог получить следующий набор ключей.Но мой GeoFire запрос возвращает дубликаты, так как он собирает ключи, найденные в течение первых 5 км, в дополнение к следующим 5 км и т. Д. И т. Д. *

У меня сложилось впечатление, что ондолжен возвращать только новые ключи, найденные в обновленном радиусе, я что-то пропустил?

Вывод на консоль, показывающий дубликаты ключей, найденные на расстоянии 10 км, а затем радиус 15 км:

enter image description here

My geoQuery:

let geoQuery = GeoFire(firebaseRef: DB_BASE.child("venues-location")).query(at: CLLocation(), withRadius: 1)

My fetchVenueNearby Функция:

func fetchVenueNearby(deviceLocation: CLLocation, radius: Double, handler: @escaping (Venue) -> ()) {

        geoQuery.center = deviceLocation
        geoQuery.radius = radius

        geoQuery.observe(.keyEntered) { (key: String!, venueLocation: CLLocation!) in 

            print ("FOUND KEY: ", key) 

            self.REF_VENUES.child(key).observeSingleEvent(of: .value, with: { (snapshot) in 

                if let dictionary = snapshot.value as? [String : Any] {

                    //parse snapshot code here….

                }//end if-let

            })//end observeSingleEvent

        }//end geofire query observe


    }//end func

Это мой loadMoreVenues функционал, используемый в настоящее времядля тестирования моего Geo Query

func loadMoreVenus() {

    radius += 5

    print("radius = \(radius)")


    DataService.run.fetchVenueNearby(deviceLocation: currentLocation, radius: radius) { (venue) in
        print("venue: \(venue.venueID)")
    }


}//end func

1 Ответ

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

Вам необходимо отфильтровать уже существующие результаты.

Когда вы запросите новый результат с новым параметром, что он + 5 км , он вернет вам новый результат, и вам придется сравнить то, что уже есть, и удалить его из результата.

Я не знаю много о GeoFire, но, тем не менее.

Лучше выбрать запрос на основе последнего места, которое вы получите в качестве отправной точки, а не текущего места пользователя, чтобы получитьпоследний результат без необходимости фильтровать их

...