如何使用 GeoFirestore (Java/Android) 在 google 地图上显示多个标记?
How to display multiple markers on a google map using GeoFirestore (Java/Android)?
我正在尝试使用 GeoFirestore
在我的地图片段上添加多个标记,但我不知道如何操作。我已经尝试按照他们的指导site,但我仍然无法获得想要的结果。
我在一个集合中有多个文档,如果它们在所需范围内,我希望在地图上显示这些文档;但是,我不知道应该在哪里实例化标记。
Firestore 中的数据库结构:
GeoFirebase 查询代码:
if (distantCategoryValue != null) {
switch (distantCategoryValue) {
case "6 Km":
CollectionReference geoFirestoreRef = FirebaseFirestore.getInstance().collection("Events");
GeoFirestore geoFirestore = new GeoFirestore(geoFirestoreRef);
GeoQuery geoQuery = geoFirestore.queryAtLocation(new GeoPoint(currentLocation.getLatitude(), currentLocation.getLongitude()), 6);
geoQuery.addGeoQueryDataEventListener(new GeoQueryDataEventListener() {
@Override
public void onDocumentEntered(DocumentSnapshot documentSnapshot, final GeoPoint geoPoint) {
}
@Override
public void onDocumentExited(DocumentSnapshot documentSnapshot) {
}
@Override
public void onDocumentMoved(DocumentSnapshot documentSnapshot, GeoPoint geoPoint) {
}
@Override
public void onDocumentChanged(DocumentSnapshot documentSnapshot, GeoPoint geoPoint) {
}
@Override
public void onGeoQueryReady() {
}
@Override
public void onGeoQueryError(Exception e) {
}
});
break;
}
前四个覆盖方法中的每一个都有一个包含一些数据的 DocumentSnapshot
对象作为第一个参数。根据特定区域内发生的操作调用每种方法。现在,要获取该数据,您可以使用 DocumentSnapshot 的 getData() method that has as a return type a Map<String, Object>
. Simply iterate through the map and get the l
property, which is an array that contains the latitude and longitude. Second approach would be to use DocumentSnapshot's toObject(Class valueType) 并将每个 DocumentSnapshot
对象转换为一个 Event
对象。获得数据后,使用以下代码行将其添加到地图:
Event event = documentSnapshot.getValue(Event.class);
LatLng latLng = new LatLng(event.getLatitude(), event.getLongitude());
mMap.addMarker(new MarkerOptions().position(latLng));
我正在尝试使用 GeoFirestore
在我的地图片段上添加多个标记,但我不知道如何操作。我已经尝试按照他们的指导site,但我仍然无法获得想要的结果。
我在一个集合中有多个文档,如果它们在所需范围内,我希望在地图上显示这些文档;但是,我不知道应该在哪里实例化标记。
Firestore 中的数据库结构:
GeoFirebase 查询代码:
if (distantCategoryValue != null) {
switch (distantCategoryValue) {
case "6 Km":
CollectionReference geoFirestoreRef = FirebaseFirestore.getInstance().collection("Events");
GeoFirestore geoFirestore = new GeoFirestore(geoFirestoreRef);
GeoQuery geoQuery = geoFirestore.queryAtLocation(new GeoPoint(currentLocation.getLatitude(), currentLocation.getLongitude()), 6);
geoQuery.addGeoQueryDataEventListener(new GeoQueryDataEventListener() {
@Override
public void onDocumentEntered(DocumentSnapshot documentSnapshot, final GeoPoint geoPoint) {
}
@Override
public void onDocumentExited(DocumentSnapshot documentSnapshot) {
}
@Override
public void onDocumentMoved(DocumentSnapshot documentSnapshot, GeoPoint geoPoint) {
}
@Override
public void onDocumentChanged(DocumentSnapshot documentSnapshot, GeoPoint geoPoint) {
}
@Override
public void onGeoQueryReady() {
}
@Override
public void onGeoQueryError(Exception e) {
}
});
break;
}
前四个覆盖方法中的每一个都有一个包含一些数据的 DocumentSnapshot
对象作为第一个参数。根据特定区域内发生的操作调用每种方法。现在,要获取该数据,您可以使用 DocumentSnapshot 的 getData() method that has as a return type a Map<String, Object>
. Simply iterate through the map and get the l
property, which is an array that contains the latitude and longitude. Second approach would be to use DocumentSnapshot's toObject(Class valueType) 并将每个 DocumentSnapshot
对象转换为一个 Event
对象。获得数据后,使用以下代码行将其添加到地图:
Event event = documentSnapshot.getValue(Event.class);
LatLng latLng = new LatLng(event.getLatitude(), event.getLongitude());
mMap.addMarker(new MarkerOptions().position(latLng));