Найти ближайший latlng из текущего местоположения из списка latlng, хранящегося в Firebase - PullRequest
0 голосов
/ 07 июня 2018

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

Я сохранил различные отправленные пользователями места (в виде маркеров) в моей базе данных Firebase, и я хочу, чтобы другие пользователибыть в состоянии видеть эти места, если они находятся на определенном расстоянии от своего текущего местоположения.Моя база данных Firebase выглядит следующим образом:

userPlaces
- userToken
    - lat
    - lng

Все, с чем я должен работать в данный момент, - это текущие пользователи текущего места.У меня возникли трудности с пониманием того, как я должен сделать так, чтобы они могли видеть маркеры других пользователей, которые хранятся в firebase.

В краткосрочной перспективе текущий пользователь должен иметь возможность извлечь информацию из базы данных и поставить соответствующие маркеры на карте, относящиеся к тому месту, где пользователь находится в данный момент.Я не хочу, чтобы код извлекал слишком много данных, так что, если есть, я мог бы нацелиться на те, которые мне нужны, это было бы лучше (возможно, классифицируйте latlng, если это возможно).Если есть 1000 записей, я не хочу проверять каждую из них, просто чтобы получить правильные.

Заранее спасибо :)

1 Ответ

0 голосов
/ 07 июня 2018

Вы можете использовать метод firebase orderByChild() в поле lat или lng.У вас должен быть диапазон, например, скажем, если ваш текущий лат составляет 30,00, тогда дайте мне результаты для мест, которые находятся в диапазоне от 20,00 до 40,00.

FirebaseDatabase.getInstance().getReference().child("userPlaces")
            .orderByChild("lat").startAt(20.00).endAt(40.00)
            .addChildEventListener(new ChildEventListener() {
                @Override
                public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                    /* Write your logic here*/
                }

                @Override
                public void onChildChanged(DataSnapshot dataSnapshot, String s) {
                    /* Write your logic here*/
                }

                @Override
                public void onChildRemoved(DataSnapshot dataSnapshot) {
                    /* Write your logic here*/
                }

                @Override
                public void onChildMoved(DataSnapshot dataSnapshot, String s) {
                    /* Write your logic here*/
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {
                    /* Write your logic here*/
                }
            });

Это поможет вам выбрать только те данные, которые вытребуют.Но не забудьте добавить .indexOn в ваши правила базы данных firebase, иначе он загрузит все данные на стороне клиента и затем отфильтрует их.Подробнее об этом здесь .

Выполните сложные запросы , используя базу данных Firebase в реальном времени .Это может помочь вам реструктурировать структуру базы данных более оптимизированным способом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...