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

1000 istnieją takie zapisy w Firebase, chcę znaleźć uniqueids najbliżej specyficzny długo/lat.I zaczął używać startAt() i Endat(), ale nie możemy realizować success.How klauzula warunkowa i stwardnienie queries.The zapytać mnie szukaszZnalezienie pobliżu szerokość geograficzną miejsca położonego przy użyciu Firebase

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

Odpowiedz

12

To, czego szukasz, jest częścią biblioteki Firebase Geofire. Używa Geohashów do sprytnego obchodzenia limitu Firebase'a, który możesz wykonywać tylko na jednej wartości.

Geohashes to sposób na umieszczanie długości i szerokości geograficznej w jednej wartości, która jest odpowiednia do wyszukiwania zakresów.

Aby uzyskać więcej informacji, patrz Github repo for Geofire.

+0

wielkie dzięki, Frank. –

+0

@Frank to wydaje się lepszą odpowiedzią niż moja własna. Czy powinienem usunąć mój, czy może są przypadki, w których może on nadal być przydatny? –

+0

Myślałem, że twoje też było interesujące, więc proszę, zostaw to. Fakt, że istnieje lepsza/prostsza odpowiedź, nie powoduje, że Twoja jest nieważna. PO może przyznać, że go przegłosuje (obecny przegrany jest mój). –

5

ja nie wierzę, że jest wbudowana w sposób, aby to zrobić, ale jednym ze sposobów może być stworzenie kwadratową siatkę i przypisać do każdej lokalizacji region - powiedzmy region

{x: 2, y: 4}

enter image description here

Potem można wrócić wszystkich miejscach tego regionu i sąsiednich regionach o powrocie wszystko w pewnym zakresie, który może być skorygowany w transmisji danych. Na przykład, jeśli chcesz, aby powrócić wszystko w ciągu 1 regionie {x: 2, y: 4}, że powrócisz:

{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

byłby to powrót plac otaczający region i wszystkich miejscach w tym placu. Jeśli chcesz, aby był okrągły, możesz go przyciąć z przodu. To nie jest doskonałe rozwiązanie, ale może to być sposób na zrobienie tego, co myślę, że próbujesz osiągnąć, a to oznacza powrót mniejszej ilości danych.

Powiązane problemy