0

在 Firestore 中,我有一个名为的地图数据类型latlng,它具有位置的纬度和经度。我想在 Android 中将此信息用于标记的位置。我本能地想使用这段代码,但这是错误的,因为它期望(double, double)而不是(Object).

MarkerOptions options = new MarkerOptions().position(new LatLng(document.get("latlng")))

编辑

考虑一下 Firebase 字段是一种地图数据类型,因为它是通过这种方式从 Google Place API 自动导入的。

在此处输入图像描述

4

3 回答 3

2

试试这个,它肯定对你有用。

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轻松保存和检索。阅读官方存储库的自述文件以更好地掌握。

我希望这有帮助。快乐编码!

于 2019-07-01T16:19:22.223 回答
1

如果您在此处看到文档:LatLng

唯一可用的公共构造函数是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;

现在

MarkerOptions options = new MarkerOptions().position(new LatLng(document.latitude, document.longitude));
于 2019-07-01T15:13:30.137 回答
0

利用

import com.google.firebase.firestore.GeoPoint;

并将值放在类型上

GeoPoint geopoint;

然后从那里检索经纬度。

于 2019-07-01T15:51:52.407 回答