在 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 数据库屏幕截图
最佳答案
设法计算出如下循环和代码。
调整放置标记的知识并与 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/