web-dev-qa-db-fra.com

Obtenir un marqueur de carte par son identifiant dans Google Maps v2

en gros, lors de l'ajout d'un marqueur sur la carte, le nouveau marqueur est renvoyé et vous pouvez obtenir l'identifiant du marqueur comme si

Marker m = map.addMarker(new MarkerOptions()
                            .position(new LatLng(lat,lon)));
String id = m.getId();

existe-t-il un moyen d'obtenir un marqueur par son identifiant s'il existe plusieurs marqueurs et que vous souhaitez simplement en supprimer un? 

16
tyczj

Le problème est que l'identifiant de marqueur est généré automatiquement et ne peut pas être utilisé pour suivre les marqueurs individuellement. Un certain nombre de stratégies ont été proposées pour résoudre ce problème. On pourrait utiliser utiliser une carte de hachage pour suivre les marqueurs puis utiliser une clé de votre choix pour rechercher un marqueur spécifique et le supprimer. Une autre idée est de surcharger l'un des champs de marqueur, comme un extrait de code, puis d'ajouter une clé vous-même. Par exemple, si vous créez un nouveau marqueur (à l'aide du code de l'exemple Google), vous pouvez insérer votre propre chaîne de clé dans le champ du fragment de code.

mMap.addMarker(new MarkerOptions()                           
.position(MELBOURNE)                           
.title("Melbourne")                           
.snippet(KEY + "Population: 4,137,400"));

Plus tard, vous pourrez récupérer cette clé en utilisant

String s = marker.getSnippet()
String key = s.substring(start, end)

puis utilisez une condition pour supprimer un marqueur spécifique s'il s'agit d'une correspondance. Selon ce que vous devez faire, une approche peut être plus facile et plus efficace qu'une autre. 

19
Rarw

J'ai fait comme ça:

Initialise les variables:

private GoogleMap mMap;
private HashMap<Marker, Integer> mHashMap = new HashMap<Marker, Integer>();
private ArrayList<MyCustomModelClass> myList = new ArrayList<MyCustomModelClass>();

Ajouter un marqueur sur google map à l'aide de votre arraylist:

for (int i = 0; i < myList.size(); i++) {
    double latitude = myList.getLatitude();
    double longitude = myList.getLongitude();
    Marker marker = mMap.addMarker(new MarkerOptions().position(new LatLng(latitude,longitude))).title(myList.getTitle())
                                        .icon(BitmapDescriptorFactory.fromResource(R.drawable.location_icon));
    mHashMap.put(marker, i);
}  

Sur marker click listener:

@Override
public boolean onMarkerClick(Marker marker) { 
    int pos = mHashMap.get(marker);
    Log.i("Position of arraylist", pos+"");
}

J'espère que ceci vous aidera.

35
Hiren Patel

Utilisez WeakHashMap<Integer,Marker> pour stocker des marqueurs car, de cette manière, nous ne garderions pas en mémoire une référence à un marqueur et nous n'aurions pas à nous soucier des marqueurs collectés.

deuxièmement, nous vous recommandons d’avoir un WeakHashMap avec ID et vos données personnalisées. La documentation indique que cet objet marqueur peut changer. N'utilisez donc pas le marqueur comme clé. si l'activité est supprimée et restaurée mais que l'identifiant reste le même. Parfois, il peut aussi renvoyer null si les objets marqueurs ont changé. 

WeakHashMap<Integer,Marker> obj = new WeakHashMap <Integer,Marker>();

J'espère que cela aidera les futurs téléspectateurs ... 

4
Wasim K. Memon

Je sais qu'il est très tard. Mais maintenant, nous pouvons directement ajouter un TAG unique à un marqueur.

Marker marker = mMap.addMarker(markerOptions);
marker.setTag("");

Lien Google Developers concernant le marqueur de carte TAG

1
Ashish John

La meilleure façon de procéder consiste à utiliser un Map <int, Mark> dictionaryMark;.

Ajoutez simplement la marque dans votre dictionnaire chaque fois que vous le dessinez.

0
AbelMorgan