2016-02-23 13 views
5
-uniqueid1 
      latitude: 30.7188235 
      longitude: 76.810132 
-uniqueid2 
      latitude: 30.7188235 
      longitude: 76.810132 

có 1000 bản ghi như vậy trong firebase, tôi muốn tìm uniqueids gần nhất với một/lat.I cụ thể bắt đầu sử dụng startAt() và endAt() nhưng không thành công. Làm cách nào chúng tôi triển khai điều khoản có điều kiện và nhiều truy vấn.Tìm kiếm tôi đang tìm kiếm làTìm latlng lân cận bằng firebase

SELECT uniqueids from table where (lon-specific_lon)^2+(lat-specific_lat)^2<CONSTANT. 

Trả lời

12

Điều bạn đang tìm kiếm là một phần của thư viện Geofire của Firebase. Nó sử dụng Geohashes để khéo léo làm việc xung quanh giới hạn của Firebase mà bạn chỉ có thể truy vấn trên một giá trị duy nhất.

Geohashes là cách để đặt kinh độ và vĩ độ thành một giá trị duy nhất phù hợp cho truy vấn phạm vi.

Xem Github repo for Geofire để biết thêm thông tin.

+0

cảm ơn rất nhiều, Frank. –

+0

@Frank này có vẻ như là một câu trả lời tốt hơn của riêng tôi. Tôi có nên xóa tên của tôi hay bạn nghĩ rằng có những trường hợp nó vẫn có thể hữu ích? –

+0

Tôi nghĩ bạn cũng rất thú vị, vì vậy hãy để nó đi. Thực tế là có một câu trả lời tốt hơn/đơn giản hơn, không làm cho bạn không hợp lệ. OP có thể thừa nhận rằng bằng cách upvoting nó (upvote hiện tại là của tôi). –

5

Tôi không tin rằng có một cách tích hợp để thực hiện điều này, nhưng một cách có thể là tạo lưới vuông và gán từng vị trí khu vực - giả sử, khu vực

{x: 2, y: 4}

enter image description here

Sau đó, bạn có thể trả lại tất cả các vị trí trong một vùng nhất định có thể điều chỉnh trong cuộc gọi dữ liệu của bạn. Ví dụ, nếu bạn muốn quay trở lại tất cả mọi thứ trong vòng 1 khu vực của {x: 2, y: 4}, bạn sẽ quay trở lại:

{x: 1, y: 3} 
{x: 1, y: 4} 
{x: 1, y: 5} 
{x: 2, y: 3} 
{x: 2, y: 4} // The region you're in right now 
{x: 2, y: 5} 
{x: 3, y: 3} 
{x: 3, y: 4} 
{x: 3, y: 5} 

enter image description here

này sẽ quay trở lại một hình vuông xung quanh khu vực của bạn và tất cả các vị trí trong hình vuông đó. Nếu bạn cần nó tròn, bạn có thể cắt lựa chọn của bạn trên giao diện người dùng. Nó không phải là một giải pháp hoàn hảo, nhưng nó có thể là một cách để làm những gì tôi nghĩ rằng bạn đang cố gắng để đạt được, đó là trả lại ít dữ liệu hơn.

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