Получить пользователей из Firestore в пределах диапазона, используя GeoFireStore Android - PullRequest
2 голосов
/ 06 мая 2019

В моем приложении для Android мне нужно получить список пользователей из Firestore в пределах диапазона, используя GeoFireStore .

Структура базы данных в Firestore: enter image description here

Вся информация, которую я получил по этой ссылке .

Зависимость:

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() {     
}

Ответы [ 2 ]

1 голос
/ 08 мая 2019

Я добавляю это как ответ, потому что я не могу добавлять комментарии.

Итак, вы пытаетесь получить все DocumentSnapshots в пределах определенного радиуса, для этого вашего кодаправильно, вы создаете новый GeoFirestore экземпляр, используя 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.

0 голосов
/ 08 мая 2019

Итак, как сказал Алекс, я пропустил GeoHash в своей базе данных. Это правильно.

Код для преобразования местоположения в хеш:

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

результат:

res = svc57cx33m

Но чтобы все это работало, вам нужно правильно хранить данные в Firestore .

Как правильно хранить геоданные в Firestore здесь .

...