Как отсортировать ближайших водителей по расстоянию по определенному LatLng на карте - PullRequest
0 голосов
/ 12 февраля 2019

Я занимаюсь разработкой серверного приложения с использованием 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);
        }
...