4

在我的 Android 应用程序中,我需要使用GeoFireStore从Firestore获取用户列表。

Firestore 中的数据库结构: 在此处输入图像描述

我从这个链接得到的所有信息。

依赖:

implementation 'com.github.imperiumlabs:GeoFirestore-Android:v1.1.1'

存储库:

maven { url 'https://jitpack.io' }

一个代码:

CollectionReference geoFirestoreRef = 
FirebaseFirestore.getInstance().collection("Users");
GeoFirestore geoFirestore = new GeoFirestore(geoFirestoreRef);

GeoQuery geoQuery = geoFirestore.queryAtLocation(new GeoPoint(32.848971, 35.0920935), 30);

geoQuery.addGeoQueryDataEventListener(new GeoQueryDataEventListener() {
    @Override
    public void onDocumentEntered(DocumentSnapshot documentSnapshot, GeoPoint location) {
    }

    @Override
    public void onDocumentExited(DocumentSnapshot documentSnapshot) {  
    }

    @Override
    public void onDocumentMoved(DocumentSnapshot documentSnapshot, GeoPoint location) { 
    }

    @Override
    public void onDocumentChanged(DocumentSnapshot documentSnapshot, GeoPoint location) {    
    }

    @Override
    public void onGeoQueryReady() {     
    }

    @Override
    public void onGeoQueryError(Exception exception) {
    }
});

所以我没有做我不能调用一个函数:

@Override
public void onDocumentEntered(DocumentSnapshot documentSnapshot, GeoPoint location) {
}

仅调用此函数:

@Override
public void onGeoQueryReady() {     
}
4

2 回答 2

3

我将此添加为答案,因为我无法添加评论。

因此,您要做的是DocumentSnapshots在某个半径范围内获取所有内容,为此您的代码是正确的,您GeoFirestore使用 a 创建一个新实例CollectionReference,然后查询您想要的位置。

问题是在您的数据库中,GeoFirestore目前没有可用的位置数据;您可以通过在将文档添加到数据库时附加“位置数据”来解决此问题。

implementation 'com.github.imperiumlabs:GeoFirestore-Android:v1.2.0'
/*
 * You have to do this only one time for document
 * so the best is after the document upload to Firestore.
 */

//The id of the document you want to add the location
String documentId = documentReference.id;
GeoPoint point = new GeoPoint(/*lat,long of your point*/);
geoFirestore.setLocation(documentId, point);

你可以在这里找到官方文档。

作为最后一个提示,我建议您将库更新到正确的版本(1.2.0),因为地理哈希算法已更改,您可以利用 kotlin 功能。

于 2019-05-08T13:54:36.890 回答
0

所以,正如亚历克斯所说,我在我的数据库中错过了 GeoHash。这是对的。

代码将位置转换为哈希:

GeoHash geoHash = new GeoHash(32.9235234, 35.3310622);
String res = geoHash.getGeoHashString();

结果:

res = svc57cx33m

但要使所有这些工作,您需要在Firestore中正确存储数据。

如何在 Firestore 中正确存储地理数据

于 2019-05-08T08:07:41.517 回答