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

ci sono 1000 tali registri in Firebase, voglio trovare UniqueIDs vicini ad una specifica lunghezza/lat.I iniziato ad usare startAt() e EnDat(), ma non facciamo success.How attuiamo clausola condizionale e multiple queries.The interrogare me cercandoTrovare vicina dati latlng utilizzando Firebase

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

risposta

12

Quello che stai cercando fa parte della libreria Geofire di Firebase. Usa Geohashes per aggirare abilmente il limite di Firebase che puoi solo interrogare su un singolo valore.

Geohashes sono un modo per inserire longitudine e latitudine in un singolo valore adatto per l'interrogazione dell'intervallo.

Vedere Github repo for Geofire per ulteriori informazioni.

+0

grazie mille, Frank. –

+0

@Frank questa sembra una risposta migliore della mia. Dovrei cancellare il mio, o pensi che ci siano casi in cui potrebbe essere ancora utile? –

+0

Pensavo che anche il tuo fosse interessante, quindi per favore lascia perdere. Il fatto che esista una risposta migliore/più semplice non rende invalido il tuo. L'OP potrebbe riconoscere che svalutandolo (l'upvote corrente è mio). –

5

non credo ci sia un modo incorporato per fare questo, ma un modo potrebbe essere quello di creare una griglia quadrata e assegnare ogni posizione per una regione - ad esempio, regione

{x: 2, y: 4}

enter image description here

Poi si potrebbe tornare tutte le posizioni quella regione e vicini regioni restituendo tutto in un certo intervallo che potrebbe essere regolato nella chiamata dati. Ad esempio, se si voleva tornare tutto entro 1 regione {x: 2, y: 4}, si potrebbe tornare:

{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

Questo sarebbe restituire una piazza che circonda la vostra regione e tutte le posizioni in quella piazza. Se hai bisogno che sia circolare, puoi tagliare la selezione sul front-end. Non è una soluzione perfetta, ma potrebbe essere un modo per fare ciò che penso tu stia cercando di realizzare, il che significa meno dati.