从存储在 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 个条目,我不想检查每个条目,只是为了提取正确的条目。

提前,谢谢:)

您可以在 latlng 字段上使用 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。这可能会帮助您以更优化的方式重组数据库结构。