web-dev-qa-db-fra.com

Supprimer un marqueur de Google Map

Dans la nouvelle API Google Maps pour Android, nous pouvons ajouter un marqueur , mais il n’ya aucun moyen de les supprimer (facilement).

Ma solution consiste à conserver les marqueurs dans une carte et à redessiner la carte lorsque je souhaite supprimer un marqueur, mais ce n'est pas très efficace.

private final Map<String, MarkerOptions> mMarkers = new ConcurrentHashMap<String, MarkerOptions>();

private void add(String name, LatLng ll) {
  final MarkerOptions marker = new MarkerOptions().position(ll).title(name);
  mMarkers.put(name, marker);

  runOnUiThread(new Runnable() {
    @Override
    public void run() {
      mMap.addMarker(marker);
    }
  });
}

private void remove(String name) {
  mMarkers.remove(name);

  runOnUiThread(new Runnable() {
    @Override
    public void run() {
      mMap.clear();

      for (MarkerOptions item : mMarkers.values()) {
        mMap.addMarker(item);
      }
    }
  });
}

Quelqu'un a-t-il une meilleure idée?

87
Jonas

La signature de la méthode pour addMarker est:

public final Marker addMarker (MarkerOptions options)

Ainsi, lorsque vous ajoutez un marqueur à un GoogleMap en spécifiant ses options, vous devez enregistrer l'objet Marker renvoyé (au lieu de l'objet MarkerOptions que vous avez utilisé pour le créer). Cet objet vous permet de changer l'état du marqueur ultérieurement. Lorsque vous avez terminé avec le marqueur, vous pouvez appeler Marker.remove() pour le supprimer de la carte.

En passant, si vous voulez seulement le cacher temporairement, vous pouvez changer la visibilité du marqueur en appelant Marker.setVisible(boolean) .

205
Anthony

pour effacer tous les gribouillis dans la carte 

map.clear()
20
federico verchez

Ajouter le marqueur à la carte comme ceci

Marker markerName = map.addMarker(new MarkerOptions().position(latLng).title("Title"));

Ensuite, vous pourrez utiliser la méthode remove, elle ne supprimera que ce marqueur

markerName.remove();
20
Eclipse22

si un marqueur existe, retirer le dernier marqueur. si le marqueur n'existe pas, créer le marqueur actuel

Marker currentMarker = null;
if (currentMarker!=null) {
    currentMarker.remove();
    currentMarker=null;
}

if (currentMarker==null) {
    currentMarker = mMap.addMarker(new MarkerOptions().position(arg0).
    icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN)));
}
3
dor sharoni

utilisez le code suivant:

 mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
       @Override
       public boolean onMarkerClick(Marker marker) {

           marker.remove();
           return true;
       }
   });

une fois que vous avez cliqué sur "un marqueur" , vous pouvez le supprimer.

1
kuo chang

_ {1. Si vous souhaitez supprimer un marqueur, vous pouvez le faire en tant que marker.remove(); vous pouvez également masquer le marqueur au lieu de le supprimer comme

 marker.setVisible(false);

et le rendre visible plus tard si nécessaire.
2. Toutefois, si vous souhaitez supprimer tous les marqueurs de la carte Utilisermap.clear();
Note:map.clear(); supprimera également Polylines, Circles etc.
3. Si vous ne souhaitez pas supprimer Polylines, Circles, etc., utilisez une boucle de la longueur du marqueur (si vous en avez plusieurs) pour les supprimer Découvrez l'exemple ici _ ​​OU définissez-les Visible false et n'utilisez pas map.clear(); dans ce cas.

1
Inzimam Tariq IT

Juste une note, quelque chose que j'ai perdu des heures à chercher ce soir ...

Si vous décidez de conserver un marqueur pour une raison quelconque, après l'avoir retiré d'une carte ... getTag renverra NULL, même si les valeurs restantes get renverront avec les valeurs que vous avez définies lors de la création du marqueur. .

La valeur de TAG est définie sur NULL si vous supprimez un marqueur, puis essayez de le référencer.

Ça ressemble à un bug pour moi...

0
Speckpgh

Créer un tableau avec tous les marqueurs sur add in map.

Plus tard, utilisez:

Marker temp = markers.get(markers.size() - 1);
temp.remove();
0
Elton da Costa

Faire une variable globale pour garder une trace du marqueur 

private Marker currentLocationMarker;

// Supprimer l'ancien marqueur

            if (null != currentLocationMarker) {
                currentLocationMarker.remove();
            }

// Ajoute un marqueur mis à jour et déplace la caméra

            currentLocationMarker = mMap.addMarker(new MarkerOptions().position(
                    new LatLng(getLatitude(), getLongitude()))
                    .title("You are now Here").visible(true)
                    .icon(Utils.getMarkerBitmapFromView(getActivity(), R.drawable.auto_front))
                    .snippet("Updated Location"));

            currentLocationMarker.showInfoWindow();
0
Hitesh Sahu