Android: Опрос близлежащих локаций из Firebase - PullRequest
0 голосов
/ 31 мая 2018

У меня есть база данных firebase (база данных в реальном времени) с более чем 700 объектами.У каждого из них есть широта и долгота.Хотелось бы узнать, есть ли какой-нибудь способ их запросить и показать только те, которые находятся рядом с расположением устройства.Я пытался понять geofire, но я не мог.Это пример из одного объекта в firebase: enter image description here, и это то, что я использовал, чтобы показать все данные:

ChildEventListener childEventListener = new ChildEventListener() {
            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String previousChildName) {
                mDatabase = FirebaseDatabase.getInstance().getReference();
                Log.d(TAG, "onChildAdded:" + dataSnapshot.getKey());

                //Get firebase info for each gym
                Gym gym=dataSnapshot.getValue(Gym.class);
                gym.setGym_id(dataSnapshot.getKey());


               //Set custom marker with firebase info
                LatLng newLocation= new LatLng(Double.parseDouble(gym.getLatitude()),Double.parseDouble(gym.getLongitude()));
                if (dataSnapshot.hasChild("raid")){
                    Marker marker= mMap.addMarker(new MarkerOptions()
                            .position(newLocation)
                            .title(gym.getName())
                            .snippet(gym.getUrl())
                            .icon(BitmapDescriptorFactory.fromBitmap(bMapRaid)));
                    marker.setTag(gym);
                } else {
                    Marker marker= mMap.addMarker(new MarkerOptions()
                            .position(newLocation)
                            .title(gym.getName())
                            .snippet(gym.getUrl())
                            .icon(BitmapDescriptorFactory.fromBitmap(bMap)));
                    marker.setTag(gym);
                }
            }

1 Ответ

0 голосов
/ 31 мая 2018

да, если у вас есть узел главного дерева со всеми вашими usersID и внутри каждого userID у вас есть широта и долгота, вы можете запросить все свое дерево пользователей, а внутри каждого из них указать свою широту и долготу, а затем вы можете сделатьлогика, чтобы проверить, находятся ли каждый вытянутый широту и долготу рядом с вашими.

это то, как вы извлекаете все данные, скажем, у вас есть главный узел дерева Users, и внутри у вас есть каждый userUID с широтой и долготой внутридля каждого из них вы должны сделать что-то вроде этого

  mDatabase.child("Users").addValueEventListener( new ValueEventListener(){
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            ArrayList<Users> users = new Arraylist<>(); //an arraylist to save all the latitude and longitude values
            for(DataSnapshot post : dataSnapshot.getChildren() ){
                // Iterate through all your users and get latitude and longitude
               Users u = users.getValue(Users.class); //here you need a pojo in which you will have the variables you want to fetch, they need to be named exactly as your database one , remember, a pojo is just a class with setters and getters
               //and then just get your values and add them to your array
              long latlang =  u.latitudelongitude; //store your latlang
// in your case you dont have 1 key with latitude and longitude, you will have to fetch them separate, just do long latitude = u.latitude; and long longitude = u.longitude;
               users.add(latlang);  //add it to your arraylist

            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {}
    });

, а затем, после того как вы получите все значения, просто получите их из массива и сравните их с вашими, выполните некоторую логику и все готово

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

счастливого кодирования!

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