Я занимаюсь разработкой серверного приложения с использованием Spring-boot Framework.В моей системе есть следующие приложения: - Приложение клиента - Приложение филиала - Приложение драйвера
Клиент может сделать заказ из определенного филиала, филиал имеет определенный LatLng, сохраненный в базе данных.
Тем не мение.Драйверы обновляют свое местоположение непосредственно в базе данных firebase-realtime-database.
Когда клиент сделал заказ из определенной ветви, я извлекаю местоположение филиала и вызываю все драйверы из базы данных firebase.
У меня такой вопрос, если предположить, что в базе данных реального времени у нас более 20 драйверов.Я хочу получить первые 10 ближайших драйверов, отсортированных по ближайшему драйверу из ветви, используя библиотеку GeoFire.
Как я могу это сделать?
Пожалуйста, см. Мой код ниже:
private List<OrderDriver> getNearDriversFromFirestore(Branch branch, double radius) {
CollectionReference availableDriversRef = FirestoreClient.getFirestore()
.collection(FirebaseConstants.AVAILABLE_DRIVERS_COLLECTION_PATH);
GeoPoint geoPoint = new GeoPoint(branch.getLatitude(), branch.getLongitude());
List<OrderDriver> nearDrivers = new ArrayList<>();
GeoFirestore geoFire = new GeoFirestore(availableDriversRef);
GeoQuery geoQuery = geoFire.queryAtLocation(geoPoint, radius);
geoQuery.addGeoQueryEventListener(new GeoQueryEventListener() {
@Override
public void onKeyEntered(String paramString, GeoPoint paramGeoPoint) {
OrderDriver orderDriver = new OrderDriver();
orderDriver.setDriverId(Long.parseLong(paramString));
orderDriver.setLattitude(paramGeoPoint.getLatitude());
orderDriver.setLongtitude(paramGeoPoint.getLongitude());
orderDriver.setDistance(CommonUtils.distance(branch.getLatitude(), paramGeoPoint.getLatitude(), branch.getLongitude(),
paramGeoPoint.getLongitude(), 0, 0));
System.out.println("GeoQuery driver : " + orderDriver.getDriverId());
if(orderDriver.getDistance() <= radius)
nearDrivers.add(orderDriver);
}