После поиска в течение нескольких дней по группам 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 по запросу