如果我要实现从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个孩子,我认为这是低效的。
我想知道是否有更好的方法呢?
答案 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。