使用 GeoFireStore 从 Firestore 中检索用户 Android
Retrieve users from Firestore within a range using GeoFireStore Android
在我的 Android 应用程序中,我需要使用 GeoFireStore 从 Firestore 获取用户列表。
Firestore 中的数据库结构:
我从中得到的所有信息link。
依赖性:
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() {
}
因此,正如 Alex 所说,我在数据库中遗漏了 GeoHash。这是正确的。
代码将位置转换为散列:
GeoHash geoHash = new GeoHash(32.9235234, 35.3310622);
String res = geoHash.getGeoHashString();
结果:
res = svc57cx33m
但要使所有这些工作正常,您需要将数据正确存储在 Firestore。
如何在 Firestore 中正确存储地理数据 .
我将此添加为答案,因为我无法添加评论。
所以,您要做的是让所有 DocumentSnapshots
都在一定半径内,为此您的代码是正确的,您使用 [=13 创建一个新的 GeoFirestore
实例=],然后查询你想要的位置。
问题是在你的数据库中目前没有位置数据可供GeoFirestore使用;您可以通过 在将文档添加到数据库时附加 "location data" 来解决此问题 .
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);
你可以找到官方文档here。
作为最后的提示,我建议您将库更新到正确的版本 (1.2.0),因为地理哈希算法已更改并且您可以利用 kotlin 功能。
在我的 Android 应用程序中,我需要使用 GeoFireStore 从 Firestore 获取用户列表。
Firestore 中的数据库结构:
我从中得到的所有信息link。
依赖性:
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() {
}
因此,正如 Alex 所说,我在数据库中遗漏了 GeoHash。这是正确的。
代码将位置转换为散列:
GeoHash geoHash = new GeoHash(32.9235234, 35.3310622);
String res = geoHash.getGeoHashString();
结果:
res = svc57cx33m
但要使所有这些工作正常,您需要将数据正确存储在 Firestore。
如何在 Firestore 中正确存储地理数据
我将此添加为答案,因为我无法添加评论。
所以,您要做的是让所有 DocumentSnapshots
都在一定半径内,为此您的代码是正确的,您使用 [=13 创建一个新的 GeoFirestore
实例=],然后查询你想要的位置。
问题是在你的数据库中目前没有位置数据可供GeoFirestore使用;您可以通过 在将文档添加到数据库时附加 "location data" 来解决此问题 .
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);
你可以找到官方文档here。
作为最后的提示,我建议您将库更新到正确的版本 (1.2.0),因为地理哈希算法已更改并且您可以利用 kotlin 功能。