作者:快乐每一天Everyone | 来源:互联网 | 2023-02-09 23:47
我很难理解GeoFire如何查询附近的位置;
我正在构建一个基于地理位置的应用,它将根据用户位置获取附近的位置.我的数据结构如下
locations
-Ke1uhoT3gpHR_VsehIv
-Kdrel2Z_xWI280XNfGg
-name: "place 1"
-description: "desc 1"
geofire
-Ke1uhoT3gpHR_VsehIv
-Kdrel2Z_xWI280XNfGg
-g: "dr5regw90s"
-l
-0: 40.7127837
-1: -74.00594130000002
我似乎无法理解" 跟踪键 "和离开和进入GeoQueries的位置的整个想法.(也许这个概念与优步类功能更相关)
假设locations
上面就在附近,我究竟会用自己的lat和long坐标来获取它们?我确定我误解了GeoFires文档,但我只是没有看到它.
1> Aryeetey Sol..:
要获取附近的所有位置,首先我们获得数据库参考,以便我们保存GeoFire位置.从你的问题来看,它应该是
DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("geofire");
接下来,我们使用GeoFire位置引用作为参数创建一个GeoFire实例
GeoFire geoFire = new GeoFire(ref);
现在我们geoFire
使用它的queryAtLocation
方法查询GeoFire引用.该queryAtLoction
方法有两个参数:一个GeoLocation对象和一个距离范围.因此,如果我们使用3作为距离范围,那么距离用户3公里的任何位置都将显示在该onKeyEntered(...)
方法中.
注意:GeoLocation对象有两个参数:纬度和经度.所以我们可以使用用户的纬度和经度作为参数GeoQuery geoQuery = geoFire.queryAtLocation(new GeoLocation(userLatitde,userLongitude),3);
geoQuery.addGeoQueryEventListener(new GeoQueryEventListener() {
@Override
public void onKeyEntered(String key, GeoLocation location) {
//Any location key which is within 3km from the user's location will show up here as the key parameter in this method
//You can fetch the actual data for this location by creating another firebase query here
Query locatiOnDataQuery= new FirebaseDatabase.getInstance().child("locations").child(key);
locationDataQuery..addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
//The dataSnapshot should hold the actual data about the location
dataSnapshot.getChild("name").getValue(String.class); //should return the name of the location and dataSnapshot.getChild("description").getValue(String.class); //should return the description of the locations
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
@Override
public void onKeyExited(String key) {}
@Override
public void onKeyMoved(String key, GeoLocation location) {}
@Override
public void onGeoQueryReady() {
//This method will be called when all the locations which are within 3km from the user's location has been loaded Now you can do what you wish with this data
}
@Override
public void onGeoQueryError(DatabaseError error) {
}
});