Как отобразить несколько маркеров на карте Google с помощью GeoFirestore (Java / Android)? - PullRequest
0 голосов
/ 08 июня 2019

Я пытаюсь добавить более одного маркера на фрагмент карты, используя GeoFirestore, но я не понимаю, как это сделать. Я пытался следовать указаниям их сайта , но все еще не могу получить желаемые результаты.

У меня есть несколько документов в коллекции, которые я хочу отобразить на карте, если они находятся в требуемом диапазоне; Тем не менее, я не знаю, где я должен создавать экземпляры маркеров.

Структура базы данных в Firestore:

enter image description here

Код запроса 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;
        }

1 Ответ

1 голос
/ 08 июня 2019

Каждый из первых четырех переопределяющих методов имеет в качестве первого аргумента объект DocumentSnapshot, который содержит некоторые данные. Каждый метод вызывается в соответствии с операцией, которая происходит в определенной области. Теперь, чтобы получить эти данные, вы можете использовать метод DocumentSnapshot getData () , который имеет тип возвращаемого значения Map<String, Object>. Просто переберите карту и получите свойство l, которое представляет собой массив, содержащий широту и долготу. Второй подход заключается в использовании toObject (Class valueType) DocumentSnapshot и преобразование каждого объекта DocumentSnapshot в объект Event. Получив данные, добавьте их на карту, используя следующие строки кода:

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