Dans la nouvelle API Google Maps pour Android, nous pouvons ajouter un marqueur , mais il n'y a aucun moyen d'en supprimer (facilement) un.
Ma solution est de garder les marqueurs dans une carte et de redessiner la carte lorsque je veux 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?
android
google-maps
Jonas
la source
la source
Réponses:
La signature de méthode pour
addMarker
est:Ainsi, lorsque vous ajoutez un marqueur à un
GoogleMap
en spécifiant les options du marqueur, vous devez enregistrer l'Marker
objet qui est retourné (au lieu de l'MarkerOptions
objet que vous avez utilisé pour le créer). Cet objet vous permet de modifier ultérieurement l'état du marqueur. Lorsque vous avez terminé avec le marqueur, vous pouvez appelerMarker.remove()
pour le supprimer de la carte.En passant, si vous ne souhaitez le masquer que temporairement, vous pouvez basculer la visibilité du marqueur en appelant
Marker.setVisible(boolean)
.la source
Ajoutez le marqueur à la carte comme ceci
Ensuite, vous pourrez utiliser la méthode remove, elle supprimera uniquement ce marqueur
la source
pour effacer tous les gribouillis de la carte, utilisez
la source
si un marqueur existe, supprimez le dernier marqueur. si le marqueur n'existe pas, créer le marqueur courant
la source
Si vous utilisez le langage Kotlin, ajoutez simplement ce code:
Créez des variables globales de
GoogleMap
etMarker
types.J'utilise un marqueur variable pour que la valeur du marqueur variable puisse changer directement
Et j'utilise cette fonction / méthode pour ajouter le marqueur sur ma carte:
Après avoir créé la fonction, je place ce code sur le
onMapReady()
pour supprimer le marqueur et en créer un nouveau:C'est un bonus si vous souhaitez afficher l'emplacement de l'adresse lorsque vous cliquez sur le marqueur, ajoutez ce code pour masquer et afficher l'adresse du marqueur, mais vous avez besoin d'une méthode pour obtenir l'emplacement de l'adresse. J'ai reçu le code de ce post: Comment obtenir l'adresse complète de la latitude et de la longitude?
la source
utilisez le code suivant:
une fois que vous cliquez sur «un marqueur» , vous pouvez le supprimer.
la source
Juste une NOTE, quelque chose que j'ai perdu des heures à retrouver ce soir ...
Si vous décidez de conserver un marqueur pour une raison quelconque, après l'avoir SUPPRIMÉ d'une carte ... getTag retournera NULL, même si les valeurs get restantes reviendront avec les valeurs que vous leur avez définies lors de la création du marqueur. .
La valeur TAG est définie sur NULL si jamais vous supprimez un marqueur, puis essayez de le référencer.
Ça ressemble à un bug pour moi...
la source
1. Si vous souhaitez supprimer un marqueur, vous pouvez le faire car
marker.remove();
vous pouvez également masquer le marqueur au lieu de le supprimer commeet rendez-le visible plus tard en cas de besoin.
2. Toutefois, si vous souhaitez supprimer tous les marqueurs de la carte, utilisez
map.clear();
Remarque:
map.clear();
supprimera égalementPolylines, Circles
etc.3. Si vous ne voulez pas supprimer,
Polylines, Circles
etc., utilisez une boucle de la longueur du marqueur (si vous avez plusieurs marqueurs) pour les supprimer Consultez l'exemple ici OU définissez-les sur Visible false Et ne l'utilisez pasmap.clear();
dans ce cas.la source
Créer une variable globale pour suivre le marqueur
// Supprimer l'ancien marqueur
// Ajouter un marqueur mis à jour et déplacer la caméra
la source
Créez un tableau avec tous les marqueurs sur la carte d'ajout.
Plus tard, utilisez:
la source
Pour ceux qui suivent l'exemple sur ce projet GoogleMaps - MapWithMarker , vous pouvez supprimer le marqueur en le faisant
la source