java - 从 Firestore 数据库检索 GeoPoint 数组添加 map 多边形

标签 java android arrays firebase google-cloud-firestore

在 StackOverflow 组中搜索了几天后,我已经能够想出以下编码,它是从 Firestore 检索地理点数组的项目以及用于在 Android googleMap 上显示多边形的项目的组合。 Activity 加载并且没有错误,但多边形似乎没有显示;我相信列表对象才是问题所在,因为当我从不同文档向 map 添加普通标记时,QueryDocumentSnapshot 工作得很好。预先感谢您的帮助。

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

最佳答案

设法计算出如下循环和代码。

调整放置标记的知识并与 stackoverflow 主题结合 here .

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());
                }
            }
        });
    }

关于java - 从 Firestore 数据库检索 GeoPoint 数组添加 map 多边形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59694662/

相关文章:

android - Sqldelight 1.4 如何在没有主键(id)的情况下插入填充数据生成对象

java - 如果必要的应用程序不存在,则重定向到 google playstore

mysql - 将 MySQL 结果集转换为单个 JSON OBJECT(MySQL 数据类型)

C# 使用用户输入来选择要从中随机打印元素的字符串数组

java - 为什么连接的字符会打印一个数字?

java - eclipse Java;导出 jar,包括引用的库,没有 fatjar

Android 形状错误在哪个 Android 版本上

将指针与字符的指针进行比较?

java - Android Firebase 保持 addListenerForSingleValueEvent 更新

java - Android/Java Json 对象数