2016-08-09 17 views
6

Tôi đã thử nghiệm với Geofire for iOS nhưng dường như không tìm thấy bất kỳ cách nào để trả lại khoảng cách từ vị trí tìm kiếm trong truy vấn vòng kết nối. GFQueryResultBlock chỉ trả về khóa và vị trí. Tôi có đúng khi giả định rằng tôi phải tự tính toán khoảng cách không?Đặt hàng kết quả Geofire trên Khoảng cách

Giả sử tôi đang tạo ứng dụng nhà hàng gần đó với Firebase và muốn hiển thị 20 nhà hàng gần nhất cho người dùng, được sắp xếp theo mức độ gần gũi. Tôi có thể tạo truy vấn vòng kết nối và sau đó tăng bán kính tìm kiếm qua vòng lặp cho đến khi tôi tìm thấy 20 nhà hàng. Sau đó tính toán khoảng cách cho từng loại và sắp xếp chúng trước khi hiển thị chúng cho người dùng. Đây có phải là một cách tiếp cận hợp lý, cho rằng một lượng lớn công việc đang được thực hiện trong ứng dụng để cấu trúc dữ liệu (tính khoảng cách & phân loại)?

Tôi nhận thấy rằng các truy vấn Geofire javascript return distance from the center, nhưng tôi đoán các phiên bản iOS và Android khác với phiên bản này.

+1

Không có hại trong cách tiếp cận này. Và nếu bạn sử dụng một trong những thói quen phân loại được cung cấp bởi iOS, nó rất nhanh. Tôi sử dụng cùng một cách tiếp cận cho một trong các ứng dụng của mình và không bao giờ gặp phải bất kỳ vấn đề nào. Khi Geofire trả về kết quả gia tăng, tất cả các lần chèn tiếp theo xảy ra trong thời gian log (n) khá hiệu quả. Tôi đoán bạn không phải đối phó với các đối tượng theo thứ tự của hàng ngàn. – kdeo

+0

Firebase geofire-js: cách lấy danh sách các khóa gần bằng các vị trí tĩnh (cố định): http://stackoverflow.com/questions/43632746/firebase-geofire-js-how-to-get-list-of-keys -of-near-by-staticfixed-locations –

Trả lời

3

Khi bạn đang truy vấn từ Geofire, kết quả có liên quan được sắp xếp tự động theo thứ tự tăng dần. Vì vậy, để có được khoảng cách, Im chỉ sử dụng chức năng distanceFromLocation: Ở đây mã của tôi:

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) 
    }) 

} 

Hope trợ giúp này!

+0

Firebase geofire-js: cách lấy danh sách các khóa gần bằng các vị trí tĩnh (cố định): http://stackoverflow.com/questions/43632746/firebase-geofire-js-how -to-get-danh sách-of-keys-of-gần-by-staticfixed-locations –

Các vấn đề liên quan