2016-08-09 12 views
6

Geofire for iOS ile denemeler yapıyorum, ancak bir daire sorgusundaki arama konumundan uzaklığı geri getirmenin herhangi bir yolunu bulamıyorum. GFQueryResultBlock yalnızca anahtarı ve konumu döndürür. Mesafeyi kendim hesaplamak zorunda olduğumu varsayarak haklı mıyım?Geofire sonuçları sipariş etme Uzaklık Mesafe

Diyelim ki Firebase ile yakındaki bir restoran uygulamasını yapıyorum ve en yakın 20 restoranın kullanıcılara ne kadar yakın olduklarını emretti. Bir daire sorgusu oluşturabilir ve 20 restoran bulabilene kadar arama yarıçapını bir döngü yoluyla artırabilirim. Sonra her biri için mesafeyi hesaplayın ve bunları kullanıcıya göstermeden önce sıralayın. Verilerin yapılandırılması için uygulamada büyük miktarda iş yapıldığını düşünürsek bu makul bir yaklaşım mıdır (mesafe hesaplaması & sıralama)?

Bu javascript Geofire'ın return distance from the center sorgularını farkettim, ancak iOS ve Android sürümlerinin bundan farklı olduğunu tahmin ediyorum.

+1

Yaklaşımda herhangi bir zarar yoktur. Ve iOS tarafından sağlanan sıralama rutinlerinden birini kullanırsanız, çok hızlıdır. Uygulamalarımdan biri için aynı yaklaşımı kullanır ve hiçbir sorunla karşılaşmam. Geofire sonuçları aşamalı olarak döndürdüğünden, sonraki tüm ekleme işlemleri oldukça verimli olan günlük (n) zamanında gerçekleşir. Sanırım binlerce sırayla nesnelerle uğraşmıyorsunuz. – kdeo

+0

Firebase geofire-js: Statik (sabit) konumların yakınında bulunan anahtarların listesini nasıl alırsınız: http://stackoverflow.com/questions/43632746/firebase-geofire-js-how-to-get-list-of-keys -of-near-by-statikfixed-location –

cevap

3

Geofire'dan sorgulama yaparken, ilgili sonuçlar otomatik olarak artan sıraya göre sıralanır. Yani mesafe almak için, Im sadece distanceFromLocation işlevini kullanarak: İşte benim kod:

func getGeoFirePlaces(){ 

    let geofireRef = FIRDatabase.database().reference().child("testForGeofire") 
    let geoFire = GeoFire(firebaseRef: geofireRef) 
    //geoFireRef is pointing to a firebase reference where I previously set all places' location 
    let userPosition = CLLocation(latitude: 32.0776067, longitude: 34.78912) 
    let circleQuery = geoFire.queryAtLocation(userPosition, withRadius: 2) 

    circleQuery.observeEventType(.KeyEntered, withBlock: { (key: String!, location: CLLocation!) in 
     print("Key '\(key)' entered the search area and is at location '\(location)'") 

     //getting distance of each Place return with the callBack 
     let distanceFromUser = userPosition.distanceFromLocation(location) 
     print(distanceFromUser) 
    }) 

} 

Umut bu yardım!

+0

Firebase geofire-js: statik (sabit) konumlara yakın anahtarların listesini nasıl alabilirim: http://stackoverflow.com/questions/43632746/firebase-geofire-js-how to-get-listesi-of-the tuşlarının-of-yakın-by-staticfixed-konumlarda –