使用Firestore数据库在地图上创建多个标记

时间:2019-01-05 01:27:59

标签: java android google-maps google-cloud-firestore

我想基于Google地图上的类型查询显示多个标记,并且我正在使用Firestore存储数据。我有点困惑并且迷失了尝试在Android中使用Firestore数据库创建标记的方法。我不知道如何将默认标记创建正确地连接到Firebase的查询功能。

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

enter image description here

我找到了一些教程,这些教程显示了如何从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我当前的错误:enter image description here

1 个答案:

答案 0 :(得分:1)

要在地图上with open(input_path, "r") as input_fd, open("out.out", "w") as output_fd: temp = subprocess.call([exe_path], stdin=input_fd, stdout=output_fd) 下显示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)); } } } }); 的标记。