Извлечение массива GeoPoint из базы данных Firestore добавить полигон карты - PullRequest
0 голосов
/ 11 января 2020

После поиска в течение нескольких дней по группам StackOverflow я смог найти следующую кодировку, которая представляет собой комбинацию элементов, найденных для получения массивов геопунктов из Firestore, а также элементов для отображения многоугольников в Android googleMap. Действие загружается и ошибок нет, однако, кажется, что многоугольник не отображается; Я полагаю, что именно объект List является проблемой, поскольку QueryDocuementSnapshot отлично работает, когда я добавляю нормальные маркеры на карту из разных документов. Заранее благодарю за помощь.

private void addPolygonsToMap(GoogleMap googleMap) {
    FirebaseFirestore db = FirebaseFirestore.getInstance();
    CollectionReference pProfileRef = db.collection("polygons");
    pProfileRef.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
        @Override
        public void onComplete(@NonNull Task<QuerySnapshot> task) {
            if (task.isSuccessful()) {
                for (QueryDocumentSnapshot document : task.getResult()) {
                    Log.d(TAG, document.getId() + " => " + document.getData());
                    List<Object> polyPoint=(List<Object>)document.get("points"); for (Object geoObject : polyPoint) {
                        int length = polyPoint.size();
                        if(length ==0){
                            return;
                        }
                        PolygonOptions poly = new PolygonOptions();
                        poly.fillColor(0x4d4fa5d5);
                        for (int i = 0; i < length; i++) {
                            poly.add(new LatLng(polyPoint.get(i).a, polyPoint.get(i).b));
                        }
                        googleMap.addPolygon(poly);
                    }
                }
            } else {
                Log.d(TAG, "Error getting documents:", task.getException());
            }
        }
    });
}

Тогда в моем onMapReady есть.

@Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;
       // polyMap = googleMap;
        LatLng latLng = new LatLng(currentLocation.getLatitude(), currentLocation.getLongitude());
        MarkerOptions markerOptions = new MarkerOptions().position(latLng).title("My Location");
        googleMap.animateCamera(CameraUpdateFactory.newLatLng(latLng));
        googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng, 5));
        googleMap.addMarker(markerOptions);
        //googleMap.setMaxZoomPreference(18.0f);
        //googleMap.setMinZoomPreference(6.0f);
        addMarkersToMap(googleMap);
        addPolygonsToMap(googleMap);

        if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            return;
        }
        googleMap.setMyLocationEnabled(true);
        // Set a listener for marker click.
        //googleMap.setOnMarkerClickListener(this);
    }

Скриншот базы данных Firebase по запросу enter image description here

1 Ответ

0 голосов
/ 14 января 2020

Управляется для обработки l oop и кода, как показано ниже.

Адаптация знаний о размещении маркеров и комбинировании со stackoverflow topi c здесь .

private void addPolygonsToMap(GoogleMap googleMap) {
        FirebaseFirestore db = FirebaseFirestore.getInstance();
        CollectionReference pProfileRef = db.collection("polygons");
        pProfileRef.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
            @Override
            public void onComplete(@NonNull Task<QuerySnapshot> task) {
                if (task.isSuccessful()) {
                    for (QueryDocumentSnapshot document : task.getResult()) {
                        Log.d(TAG, document.getId() + " => " + document.getData());
                        List<Object> polyPoint=(List<Object>)document.get("points");
                                int length = polyPoint.size();
                                if (length == 0) {
                                    return;
                                }
                                PolygonOptions poly = new PolygonOptions();
                                poly.fillColor(0x4d4fa5d5);
                                for (int i = 0; i < length; i++) {
                                    GeoPoint polyGeo = (GeoPoint) polyPoint.get(i);
                                    double lat = polyGeo.getLatitude();
                                    double lng = polyGeo.getLongitude ();
                                    LatLng latLng = new LatLng(lat, lng);
                                    poly.add(latLng);
                                }
                                googleMap.addPolygon(poly);
                    }
                } else {
                    Log.d(TAG, "Error getting documents:", task.getException());
                }
            }
        });
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...