java - 使用 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 我当前的错误:
解决方案
要在地图上显示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
。
推荐阅读
- asp.net-core - 如何在 ASP .NET Core Web API 中调用 SQL 查询
- python - 读取大型 csv 文件时设置 dtypes 的问题
- omnet++ - 错误:语法错误,意外名称,在 OMNET++ 中期望 $end?
- python - 如何计算csv文件中每天的条目?
- python - 不同参数的Python烧瓶蓝图注册路线
- android - 是否可以在 android 上将 node js 应用程序作为后台服务运行?
- c++ - 未使用附加字段调用凭据提供程序“SetComboBoxSelectedValue”
- c++ - 无法将来自外部共享库的信号连接到 QWidget 派生类的重载插槽
- c# - EPERM:不允许操作 - IIS 上的 NPM Angular 7 与后端 .Net Core 2.1
- mysql - 使用大小写按计算列过滤和排序(未找到列)