从Firebase

时间:2016-09-17 14:18:48

标签: android google-maps firebase firebase-realtime-database viewport

如果我要实现从mySQL数据库中获取给定视口内的latlng列表,我将查询类似SELECT * FROM places WHERE lat>=$east && lat<=$west && lng>=south && lng<=north

的内容

我想知道我们怎样才能在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);
    }
}

如果我们有来自lat的1000个孩子和来自lng的1000个孩子,我认为这是低效的。

我想知道是否有更好的方法呢?

1 个答案:

答案 0 :(得分: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