【问题标题】:How to display multiple markers on a google map using GeoFirestore (Java/Android)?如何使用 GeoFirestore (Java/Android) 在谷歌地图上显示多个标记?
【发布时间】:2019-06-07 21:06:30
【问题描述】:

我正在尝试使用GeoFirestore 在我的地图片段上添加多个标记,但我不明白该怎么做。我已尝试遵循他们的 site 的指导,但仍然无法获得预期的结果。

我在一个集合中有多个文档,如果它们在所需范围内,我希望在地图上显示它们;但是,我不知道应该在哪里实例化标记。

Firestore 中的数据库结构:

GeoFirebase 查询代码:

if (distantCategoryValue != null) {
        switch (distantCategoryValue) {
            case "6 Km":

                CollectionReference geoFirestoreRef = FirebaseFirestore.getInstance().collection("Events");
                GeoFirestore geoFirestore = new GeoFirestore(geoFirestoreRef);
                GeoQuery geoQuery = geoFirestore.queryAtLocation(new GeoPoint(currentLocation.getLatitude(), currentLocation.getLongitude()), 6);
                geoQuery.addGeoQueryDataEventListener(new GeoQueryDataEventListener() {
                    @Override
                    public void onDocumentEntered(DocumentSnapshot documentSnapshot, final GeoPoint geoPoint) {

                    }

                    @Override
                    public void onDocumentExited(DocumentSnapshot documentSnapshot) {

                    }

                    @Override
                    public void onDocumentMoved(DocumentSnapshot documentSnapshot, GeoPoint geoPoint) {

                    }

                    @Override
                    public void onDocumentChanged(DocumentSnapshot documentSnapshot, GeoPoint geoPoint) {

                    }

                    @Override
                    public void onGeoQueryReady() {
                    }

                    @Override
                    public void onGeoQueryError(Exception e) {

                    }

                });

                break;
        }

【问题讨论】:

    标签: java android firebase google-cloud-firestore geofirestore


    【解决方案1】:

    前四个覆盖方法中的每一个都有一个包含一些数据的DocumentSnapshot 对象作为第一个参数。根据在特定区域内发生的操作调用每个方法。现在,要获取该数据,您可以使用 DocumentSnapshot 的 getData() 方法,该方法的返回类型为 Map<String, Object>。只需遍历地图并获取l 属性,它是一个包含纬度和经度的数组。第二种方法是使用 DocumentSnapshot 的 toObject(Class valueType) 并将每个 DocumentSnapshot 对象转换为 Event 对象。获取数据后,使用以下代码行将其添加到地图:

    Event event = documentSnapshot.getValue(Event.class);
    LatLng latLng = new LatLng(event.getLatitude(), event.getLongitude());
    mMap.addMarker(new MarkerOptions().position(latLng));
    

    【讨论】:

    • 我也意识到我添加的位置不正确,如下所示:“geoFirestore.setLocation(userId, new GeoPoint(latitude, -longitude)”。我在经度和 onDocumentEntered 中取出了“-”方法开始正常工作。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2012-11-14
    • 1970-01-01
    • 2016-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-04
    相关资源
    最近更新 更多