从存储在 Firebase 中的 latlng 列表中查找距离当前位置最近的 latlng
Find closest latlng from current location from list of latlng, stored in Firebase
我在空闲时间制作应用程序,但遇到了一个难题。
我在我的 firebase 数据库中存储了不同的用户提交的地点(以标记的形式),我希望其他用户能够看到这些地点,如果他们在他们当前位置的一定缩放距离内。我的 firebase 数据库如下所示:
userPlaces
- userToken
- lat
- lng
目前我所要做的就是当前用户拥有的当前地点 latlng。我很难看到我应该如何做到这一点,以便他们可以看到存储在 firebase 中的其他用户标记。
简而言之,当前用户需要能够从 firebase 中提取信息并将相关标记放在地图上,与用户当前所在的位置相关。我也不希望代码提取太多数据,所以如果无论如何我都可以针对我需要的数据,那会更好(如果可能的话,也许对 latlng 进行分类)。如果有 1000 个条目,我不想检查每个条目,只是为了提取正确的条目。
提前,谢谢:)
您可以在 lat
或 lng
字段上使用 firebase 查询 orderByChild()
方法。你必须有一个范围,例如,如果你当前的纬度是 30.00,那么请给我 20.00 到 40.00 范围内的地点的结果。
FirebaseDatabase.getInstance().getReference().child("userPlaces")
.orderByChild("lat").startAt(20.00).endAt(40.00)
.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
/* Write your logic here*/
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
/* Write your logic here*/
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
/* Write your logic here*/
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
/* Write your logic here*/
}
@Override
public void onCancelled(DatabaseError databaseError) {
/* Write your logic here*/
}
});
这将帮助您只获取所需的相关数据。但是不要忘记将 .indexOn
放在您的 firebase 数据库规则中,否则它将在客户端下载所有数据,然后对其进行过滤。阅读更多相关信息 here。
完成 complex queries using firebase realtime database。这可能会帮助您以更优化的方式重组数据库结构。
我在空闲时间制作应用程序,但遇到了一个难题。
我在我的 firebase 数据库中存储了不同的用户提交的地点(以标记的形式),我希望其他用户能够看到这些地点,如果他们在他们当前位置的一定缩放距离内。我的 firebase 数据库如下所示:
userPlaces
- userToken
- lat
- lng
目前我所要做的就是当前用户拥有的当前地点 latlng。我很难看到我应该如何做到这一点,以便他们可以看到存储在 firebase 中的其他用户标记。
简而言之,当前用户需要能够从 firebase 中提取信息并将相关标记放在地图上,与用户当前所在的位置相关。我也不希望代码提取太多数据,所以如果无论如何我都可以针对我需要的数据,那会更好(如果可能的话,也许对 latlng 进行分类)。如果有 1000 个条目,我不想检查每个条目,只是为了提取正确的条目。
提前,谢谢:)
您可以在 lat
或 lng
字段上使用 firebase 查询 orderByChild()
方法。你必须有一个范围,例如,如果你当前的纬度是 30.00,那么请给我 20.00 到 40.00 范围内的地点的结果。
FirebaseDatabase.getInstance().getReference().child("userPlaces")
.orderByChild("lat").startAt(20.00).endAt(40.00)
.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
/* Write your logic here*/
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
/* Write your logic here*/
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
/* Write your logic here*/
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
/* Write your logic here*/
}
@Override
public void onCancelled(DatabaseError databaseError) {
/* Write your logic here*/
}
});
这将帮助您只获取所需的相关数据。但是不要忘记将 .indexOn
放在您的 firebase 数据库规则中,否则它将在客户端下载所有数据,然后对其进行过滤。阅读更多相关信息 here。
完成 complex queries using firebase realtime database。这可能会帮助您以更优化的方式重组数据库结构。