Отфильтровать список местоположений от ближайшего к самому дальнему

Мое приложение использует базу данных Firebase для отображения списка событий. С момента запуска приложения я получаю информацию о текущем местоположении пользователя и обновляю ее при изменении. Что я хотел бы сделать, так это отобразить список событий на основе текущего местоположения пользователя, переходя от ближайшего события к самому удаленному.

Я реализовал Geofire в своем приложении и получаю все события в пределах заданного радиуса, но, к сожалению, они не фильтруются на основе самого близкого к самому отдаленному.

Насколько мне известно, Geofire пока не поддерживает эту фильтрацию (но не стесняйтесь поправить меня, если я ошибаюсь).

Однако в моем адаптере я получаю список моделей, который я могу фильтровать на лету, каждая модель имеет свойство координат со значением. Итак, кто-нибудь знает, как фильтровать на основе объектов Coordinates String или Locations?

Ваше здоровье


person Andy Strife    schedule 09.04.2017    source источник


Ответы (1)


Что вы можете сделать, это:

1) Добавьте свойство расстояния (двойное поле) к вашему объекту Event;

2) Рассчитать расстояние от пользователя:

double distance = GeoUtils.distance(userLoc.getLatitude(), userLoc.getLongitude(), eventLatitude, eventLongitude);
event.setDistanceInMeters(distance);

3) После того, как вы закончите вызов Geofire, упорядочите свою коллекцию событий:

Collections.sort(eventsList, new Comparator<Event>() {
            @Override
            public int compare(Eventt1, Eventt2) {
                return Double.valueOf(t1.getDistanceInMeters()).compareTo(t2.getDistanceInMeters());
            }
        });

4) ....;

5) ПРИБЫЛЬ;

person Utnapishtim    schedule 09.04.2017