2016-09-17 8 views
0

Если бы я реализовать в получении списка LatLng в данном окне просмотра из базы данных mySQL, я запросить что-то вроде SELECT * FROM places WHERE lat>=$east && lat<=$west && lng>=south && lng<=northПолучение МЕСТОПОЛОЖЕНИЕ (LatLng) Внутри GoogleMap Viewport из Firebase

Интересно, как мы можем эффективно сделать что-то подобное в Firebase?

пример структуры,

-lats 
---12.34567 
---23.45678 


-lngs 
---12.34567 
---23.45678 

Я имею в виду получение, то каждый узел сравнения каждого из своих детей на стороне клиента.

for(double lat: lats){ 
    if(lat >= east && lat <= west){ 
     myLats.add(lat); 
    } 
} 

for(double lng: lngs){ 
    if(lng >= south && lng <= north){ 
     myLngs.add(lngs); 
    } 
} 

Я думал, что это неэффективно, если у нас 1000 детей из лат и 1000 детей из lng.

Интересно, есть ли лучший подход, чем этот?

ответ

0

Запросы базы данных Firebase могут запрашивать только одно условие. Поэтому обычно невозможно запросить местоположение, поскольку для этого требуется фильтрация как по широте, так и по долготе.

К счастью, есть библиотека под названием GeoFire, которая (посредством магии geo-hashes) позволяет запускать гео-запросы к базе данных Firebase. Образец geo-query from the documentation:

// creates a new query around [37.7832, -122.4056] with a radius of 0.6 kilometers 
GeoQuery geoQuery = geoFire.queryAtLocation(new GeoLocation(37.7832, -122.4056), 0.6); 

Я рекомендую вам проверить GeoFire for Java.

+0

Не точный эквивалент, но, возможно, я все еще мог придумать то, что мне нужно. –