1

J'ai une application Android où les utilisateurs peuvent s'inscrire et quand ils sont connectés, leur emplacement est visible par des marqueurs sur la carte, comme indiqué dans cette image. Mais je veux juste montrer seulement marqueur à moins de 100 mètres.Android - Comment afficher les marqueurs d'utilisateur à proximité?

S'il vous plaît aidez-moi avec la section de codage exact et toute l'initialisation de l'objet.

enter image description here

Voici mon code pour aller chercher tous les marqueurs de l'utilisateur (lat, lng) base de données:

private void getNearbyMarkers(){ 

    geoFireRef.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 

      for (DataSnapshot locationSnapshot : dataSnapshot.getChildren()){ 

       LocationData locations = locationSnapshot.getValue(LocationData.class); 

       final Double tempLat = Double.parseDouble(locations.getLatitude()); 
       final Double tempLng = Double.parseDouble(locations.getLongitude()); 
       final String uid = locations.getUid(); 
       databaseReference3.addValueEventListener(new ValueEventListener() { 
        @Override 
        public void onDataChange(DataSnapshot dataSnapshot) { 
         String name = dataSnapshot.child(uid).child("name").getValue().toString(); 
         String business = dataSnapshot.child(uid).child("business").getValue().toString(); 

         LatLng allLatLang = new LatLng(tempLat,tempLng); 
         MarkerOptions markerOptions = new MarkerOptions(); 
         markerOptions.position(allLatLang); 
         markerOptions.title(name); 
         markerOptions.snippet(business); 
         markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_ORANGE)); 

         locationMarker = mMap.addMarker(markerOptions); 
        } 

        @Override 
        public void onCancelled(DatabaseError databaseError) { 

        } 
       }); 

      } 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 

} 

Merci beaucoup pour votre temps et de l'assistance dans ce domaine.

Répondre

1

Vous pouvez SphericalUtil.computeDistanceBetween, pour que vous devez ajouter la dépendance,

dependencies { 
    compile 'com.google.maps.android:android-maps-utils:0.5+' 
} 

Et vous pouvez essayer comme ça dans votre code,

markerOptions.visible(false);// We dont need to show, if its less than 100 meter we can show, otherwise we will just create and we will make it visble or not later 

locationMarker = mMap.addMarker(markerOptions); 

LatLng yourLatLang = new LatLng([your lat],[your lang]); 
if (SphericalUtil.computeDistanceBetween(yourLatLang, locationMarker.getPosition()) < 100) { 
    locationMarker.setVisible(true); 
} 
+0

Je devais juste 'changer locationMarker = mMap.addMarker (markerOptions.visible (false));' et c'était la réponse parfaite, merci tellement si tellement^_ ^ – Tamim

1

Réponse courte location.distanceTo(anotherLocation)

En setupMap je recommande d'ajouter auditeur supplémentaire, pour obtenir tous les changements de position d'une manière simple.

mMap.setMyLocationEnabled(true); 
mMap.setOnMyLocationChangeListener(this); 

Ensuite, dans cet écouteur, vous prenez simplement la distance entre l'emplacement actuel et vos cibles. Distance en mètres

@Override 
public void onMyLocationChange(Location location) { 
    Location target = new Location("target"); 
    for(LatLng point : new LatLng[]{POINTA, POINTB, POINTC, POINTD}) { 
     target.setLatitude(point.latitude); 
     target.setLongitude(point.longitude); 
     if(location.distanceTo(target) < METERS_100) { 
      // bingo! 
     } 
    } 
} 

Ne pas oublier votre activité implements GoogleMap.OnMyLocationChangeListener

Hope this résout votre problème. Pour de plus amples connaissances sur la façon de travailler avec Google Maps API regarder dans cette link