如何将Firestore中的GeoPoint转换为LatLng

时间:2018-12-16 04:06:28

标签: java android firebase google-cloud-firestore geopoints

您好,我正在使用Android Studio,但无法转换从Firestore获得的数据。我将数据保存在Firestore类型的GeoPoint中,我想查询它并将其转换为对象类型LatLng

这是我的代码:

    final FirebaseFirestore db = FirebaseFirestore.getInstance();
    final CollectionReference stores = db.collection("stores");
    stores.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                @Override
                public void onComplete(@NonNull Task<QuerySnapshot> task) {
                    if (task.isSuccessful()) {
                        for (QueryDocumentSnapshot document : task.getResult()) {
                            Log.i(TAG,document.getData().get("position").toString());
                        }
                    } else {
                        Log.w(TAG, "Error getting documents.", task.getException());
                    }
                }
            });

这就是我得到的

    12-16 10:59:21.557 28239-28239/com.company.yummy.yummy I/firebaseCatch: GeoPoint { latitude=29.339555, longitude=169.715858 }
    12-16 10:59:21.557 28239-28239/com.company.yummy.yummy I/firebaseCatch: GeoPoint { latitude=68.085393, longitude=-42.081575 }
    12-16 10:59:21.557 28239-28239/com.company.yummy.yummy I/firebaseCatch: GeoPoint { latitude=16.503923, longitude=90.196118 }
    12-16 10:59:21.557 28239-28239/com.company.yummy.yummy I/firebaseCatch: GeoPoint { latitude=-69.424524, longitude=-71.356333 }
    12-16 10:59:21.557 28239-28239/com.company.yummy.yummy I/firebaseCatch: GeoPoint { latitude=69.502257, longitude=71.100474 }

我需要做的是获取纬度,经度值以设置为LatLng对象。

3 个答案:

答案 0 :(得分:3)

对于我来说,这对扑朔迷离的cloud_firestore有用

void getData() {
databaseReference
    .collection("stores")
    .getDocuments()
    .then((QuerySnapshot snapshot) {
  snapshot.documents.forEach((f) {
    print('${f.data}}');
    GeoPoint pos = f.data['position'];
    LatLng latLng = new LatLng(pos.latitude, pos.longitude);

  });
});
}

参考-https://fireship.io/lessons/flutter-realtime-geolocation-firebase/

答案 1 :(得分:2)

您需要从收到的Geopoint对象中提取纬度和经度

并像这样创建一个新的LatLng对象

double lat = document.getData().get("position").getLatitude();
double lng = document.getData().get("position").getLongitude ();
LatLng latLng = new LatLng(lat, lng);

答案 2 :(得分:2)

要解决此问题,您可以简单地使用getGeoPoint()这样的方法:

GeoPoint geoPoint = document.getGeoPoint("position");

比使用:

double lat = geoPoint.getLatitude();
double lng = geoPoint.getLongitude ();
LatLng latLng = new LatLng(lat, lng);