首页 > 解决方案 > 使用 Firestore 数据库在地图上创建多个标记

问题描述

我想根据谷歌地图上的类型查询显示多个标记,并且我正在使用 Firestore 来存储我的数据。尝试在 Android 中使用我的 Firestore 数据库创建标记时,我感到有些困惑和迷失。我不知道如何正确地将默认标记创建连接到 Firebase 的查询功能。

我在四种字段类型中存储了有关悉尼一些绿色植物的信息。我有三个字符串(名称、类型和信息)和一个带有坐标的地理点类型。我的数据库结构如下所示:

在此处输入图像描述

我找到了一些教程,展示了如何从 Firestore 数据库加载字符串值并将它们加载到您的应用程序中,但我没有找到对在地图上加载地理信息的初学者友好的解释。我试图修改基本代码以在 Google Developers 上创建一个标记,但显然没有任何结果。所以我没有很多代码。

private GoogleMap mMap; 

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_maps);
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
            .findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);
}

FirebaseFirestore db = FirebaseFirestore.getInstance();
CollectionReference citiesRef = db.collection("sydney_nature");
Query query = citiesRef.whereEqualTo("type", "Park");

@Override
public void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;
    LatLng sydney = new LatLng(-34, 151);
    mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in 
    Sydney"));
    mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
    mMap.animateCamera( CameraUpdateFactory.zoomTo( 10.0f ) );
     }

我希望创建标记,通过单击打开一个显示地点名称的信息框。目前我什么也没得到,因为我无法执行正确的查询。@Alex Mamo 我当前的错误:在此处输入图像描述

标签: javaandroidgoogle-mapsgoogle-cloud-firestore

解决方案


要在地图上显示geo下方points_au (collction) -> Park (document),请使用以下代码行:

FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
CollectionReference pointsRef = rootRef.collection("points_au");
DocumentReference parkRef = pointsRef.document("Park");
parkRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
    @Override
    public void onComplete(@NonNull Task<DocumentSnapshot> task) {
        if (task.isSuccessful()) {
            DocumentSnapshot document = task.getResult();
            if (document.exists()) {
                GeoPoint geo = document.getGeoPoint("geo");
                String name = document.getString("name");
                double lat = geo.getLatitude();
                double lng = geo.getLongitude();
                LatLng latLng = new LatLng(lat, lng);
                mMap.addMarker(new MarkerOptions().position(latLng).title(name));
            }
        }
    }
});

结果将是一个添加到地图上的标记,其标题为Royal Botanic Gardens


推荐阅读