it-swarm.com.de

Abrufen einer Kartenmarkierung anhand ihrer ID in Google Maps v2

wenn Sie der Karte einen Marker hinzufügen, wird im Grunde der neue Marker zurückgegeben, und Sie können die Marker-ID wie folgt abrufen

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

gibt es eine Möglichkeit, einen Marker anhand seiner ID zu erhalten, wenn viele Marker vorhanden sind und Sie einen löschen möchten? 

16
tyczj

Das Problem ist, dass die Marker-ID automatisch generiert wird und nicht für die individuelle Verfolgung der Marker verwendet werden kann. Um dies zu erreichen, wurde eine Reihe von Strategien vorgeschlagen. Markieren Sie zum Beispiel eine Hash-Map, um Markierungen zu verfolgen , und verwenden Sie dann einen Schlüssel, den Sie auswählen, um einen bestimmten Marker zu finden und ihn zu entfernen. Eine andere Idee ist, eines der Markierungsfelder wie das Snippet zu überladen und dann selbst einen Schlüssel hinzuzufügen. Wenn Sie beispielsweise eine neue Marke erstellen (unter Verwendung des Google-Beispielcodes), könnten Sie Ihre eigene Schlüsselzeichenfolge in das Snippet-Feld einfügen

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

Später können Sie diesen Schlüssel mit Hilfe von aufrufen

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

verwenden Sie dann eine Bedingung, um eine bestimmte Markierung zu entfernen, wenn es sich um eine Übereinstimmung handelt. Je nachdem, was Sie tun müssen, ist ein Ansatz einfacher und effizienter als ein anderer. 

19
Rarw

Ich habe diesen Weg gemacht:

Variablen initialisieren :

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

Markierung hinzufügen auf google map mithilfe Ihrer 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);
}  

Klicken Sie auf Marker Listener :

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

Hoffe, das wird dir helfen.

35
Hiren Patel

Verwenden Sie WeakHashMap<Integer,Marker> zum Speichern von Markern, da wir auf diese Weise keinen Verweis auf einen Marker im Speicher behalten und sich nicht um mit Müll gesammelte Markierungen kümmern müssen.

zweitens wird empfohlen, eine WeakHashMap mit ID und Ihren benutzerdefinierten Daten zu haben. Die Dokumentation besagt, dass sich das Markierungsobjekt möglicherweise ändert. Verwenden Sie die Markierung daher nicht als Schlüssel. Wenn die Aktivität abgebrochen und wiederhergestellt wird, bleibt die ID jedoch gleich. Irgendwann kann es auch Null zurückgeben, wenn Markierungsobjekte geändert wurden. 

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

Hoffe, es wird zukünftigen Zuschauern helfen ... 

4
Wasim K. Memon

Ich weiß, es ist sehr spät. Jetzt können wir einem Marker direkt ein eindeutiges -TAG hinzufügen.

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

Google-Entwickler-Link zu Kartenmarker TAG

1
Ashish John

Am besten verwenden Sie dazu einen Map <int, Mark> dictionaryMark;.

Fügen Sie einfach die Marke in jedes Wörterbuch ein, wenn Sie es zeichnen.

0
AbelMorgan