Я использую библиотеку AngularFire2 для запроса в firebase. В моей базе данных у меня есть коллекция data , и в них много строк с latitude
и longitude
, как показано ниже:
- data
- 1404033346513076_1998422263740845
- location
- latitude: 23.7907795
- longitude: 90.403898
- 1404033346513076_1998422263740888
- location
- latitude: 23.9907795
- longitude: 91.403898
У меня есть latitude
и longitude
моего текущего местоположения, и у меня есть вспомогательная функция, которая может определять расстояние в метрах между текущим местоположением и местоположением на основе данных пожарной базы. Предположим, функция выглядит так:
calculateDistance(currentLoc, destLoc) {
return routeDistance(currentLoc, destLoc); // It return in meters
}
Теперь мне нужен запрос, который вернет 10 строк из базы огня, которые находятся на самом кратком расстоянии от текущего местоположения.
Я знаю, что могу запросить, как показано ниже в базе данных:
constructor(private firebaseDBProvider: AngularFireDatabase) {
}
getDatas(): any {
return this.firebaseDBProvider.list('data', ref => ref.orderByChild("location").startAt(0).endAt(3));
}
Но он не предоставит мне точные данные, которые я хочу.
Еще одна вещь, которую я заметил, это то, что когда я запускаю запрос ниже, он возвращает первые 10 строк.
return this.firebaseDBProvider.list('data', ref => ref.limitToFirst(10));
Но, если вы хотите выполнить приведенный ниже запрос, он возвращает мне 0 строк.
this.firebaseDBProvider.list('data', ref => ref.startAt(0).endAt(10));
Почему это? startAt и endAt должны работать так же, как limitToFirst (10) .
Итак, каким должен быть запрос, чтобы я мог вернуть 10 строк, которые находятся на кратчайшем расстоянии от моего текущего местоположения?