在Firestore中,我有一个名为latlng
的地图数据类型,它具有位置的经度和纬度。我想在Android中将此信息用于标记的位置。我本能地考虑使用此代码,但这是错误的,因为它期望使用(double, double)
而不是(Object)
。
MarkerOptions options = new MarkerOptions().position(new LatLng(document.get("latlng")))
编辑
考虑到Firebase字段是 Map 数据类型,因为它是通过这种方式自动从Google Place API导入的。
答案 0 :(得分:1)
如果您在此处看到文档:LatLng
唯一可用的公共构造函数是 fasta
编辑:
创建一个新类来解析引用。
LatLng(double latitude, double longitude)
在参考类中创建一个新变量以解析public class MyLatLng {
public Double latitude;
public Double longitude;
public MyLatLng(Double latitude, Double longitude) {
this.latitude = latitude;
this.longitude = longitude;
}
}
LatLng
现在
public MyLatLng latlng;
答案 1 :(得分:1)
尝试一下,它绝对适合您。
db.collection("latlng")
.get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (QueryDocumentSnapshot document : task.getResult()) {
HashMap hashmap = (HashMap) document.getData();
GeoPoint geopoint = new GeoPoint(hashmap.get("latitude"), hashmap.get("longitude"));
MarkerOptions options = new MarkerOptions().position(new LatLng(geopoint.getLatitude(), geopoint.getLongitude()));
}
} else {
// handle your errors here
}
}
});
从本质上讲,以上代码库在 latlng 节点查询Firestore,并获取该位置的所有地理位置。然后,它继续在每个坐标处显示一个标记。我真的希望这会有所帮助。
有一种更简单的方法来存储和检索FirebaseDatabase中的位置值。您可以使用GeoFire轻松保存和检索。阅读the ReadMe of the official repository以获得更好的掌握。
我希望这会有所帮助。快活的编码!
答案 2 :(得分:0)
使用
import com.google.firebase.firestore.GeoPoint;
然后将值放在类型上
GeoPoint geopoint;
然后从那里获取经度和纬度。