In der neuen Google Maps-API für Android können wir einen Marker hinzufügen , aber es gibt keine Möglichkeit, einen (einfach) zu entfernen.
Meine Lösung besteht darin, die Markierungen in einer Karte zu belassen und die Karte neu zu zeichnen, wenn ich eine Markierung entfernen möchte, dies ist jedoch nicht sehr effizient.
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);
}
}
});
}
Hat jemand eine bessere Idee?
android
google-maps
Jonas
quelle
quelle
Antworten:
Die Methodensignatur für
addMarker
lautet:Wenn Sie also eine Markierung zu einer hinzufügen,
GoogleMap
indem Sie die Optionen für die Markierung angeben, sollten Sie das zurückgegebeneMarker
Objekt speichern (anstelle desMarkerOptions
Objekts, mit dem Sie es erstellt haben). Mit diesem Objekt können Sie den Markierungsstatus später ändern. Wenn Sie mit der Markierung fertig sind, können Sie anrufenMarker.remove()
, um sie von der Karte zu entfernen.Wenn Sie es nur vorübergehend ausblenden möchten, können Sie die Sichtbarkeit des Markers durch Aufrufen umschalten
Marker.setVisible(boolean)
.quelle
Fügen Sie den Marker wie folgt zur Karte hinzu
Dann können Sie die Methode remove verwenden, bei der nur dieser Marker entfernt wird
quelle
Um alle Kritzeleien in der Karte zu löschen, verwenden Sie
quelle
Wenn ein Marker vorhanden ist, entfernen Sie den letzten Marker. Wenn kein Marker vorhanden ist, erstellen Sie einen aktuellen Marker
quelle
Wenn Sie die Kotlin-Sprache verwenden, fügen Sie einfach diesen Code hinzu:
Erstellen Sie globale Variablen
GoogleMap
undMarker
Typen.Ich verwende einen variablen Marker, damit sich der Wert des variablen Markers direkt ändert
Und ich benutze diese Funktion / Methode, um den Marker auf meiner Karte hinzuzufügen:
Nachdem ich die Funktion erstellt habe, platziere ich diesen Code auf
onMapReady()
, um den Marker zu entfernen und einen neuen zu erstellen:Es ist ein Bonus, wenn Sie den Adressort anzeigen möchten, wenn Sie auf die Markierung klicken. Fügen Sie diesen Code hinzu, um die Markierungsadresse auszublenden und anzuzeigen. Sie benötigen jedoch eine Methode, um den Adressort abzurufen. Ich habe den Code aus diesem Beitrag erhalten: Wie erhalte ich die vollständige Adresse aus Längen- und Breitengrad?
quelle
Verwenden Sie den folgenden Code:
Sobald Sie auf "einen Marker" klicken , können Sie ihn entfernen.
quelle
Nur ein Hinweis, etwas, das ich heute Abend stundenlang aufgespürt habe ...
Wenn Sie sich aus irgendeinem Grund dafür entscheiden, einen Marker festzuhalten, nachdem Sie ihn von einer Karte entfernt haben, gibt getTag NULL zurück, obwohl die verbleibenden get-Werte mit den Werten zurückgegeben werden, auf die Sie sie beim Erstellen des Markers festgelegt haben. .
Der TAG-Wert wird auf NULL gesetzt, wenn Sie jemals einen Marker entfernen und dann versuchen, ihn zu referenzieren.
Scheint mir ein Fehler zu sein ...
quelle
1. Wenn Sie einen Marker entfernen möchten, können Sie dies auch tun.
marker.remove();
Alternativ können Sie den Marker auch ausblenden, anstatt ihn als zu entfernenund machen Sie es später sichtbar, wann immer es nötig ist.
2. Wenn Sie jedoch alle Markierungen von der Karte entfernen möchten, verwenden Sie
map.clear();
Hinweis: Entfernt
map.clear();
auchPolylines, Circles
usw.3. Wenn Sie usw. nicht entfernen möchten,
Polylines, Circles
verwenden Sie eine Schleife zur Länge der Markierung (wenn Sie mehrere Markierungen haben), um diese zu entfernen Schauen Sie sich das Beispiel hier an ODER setzen Sie sie auf Visible false und verwenden Sie siemap.clear();
in diesem Fall nicht.quelle
Erstellen Sie eine globale Variable, um die Markierung zu verfolgen
// Alte Markierung entfernen
// Aktualisierten Marker hinzufügen und Kamera bewegen
quelle
Erstellen Sie ein Array mit allen Markierungen beim Hinzufügen in der Karte.
Verwenden Sie später:
quelle
Für diejenigen, die dem Beispiel in diesem GoogleMaps - MapWithMarker- Projekt folgen , können Sie die Markierung auf diese Weise entfernen
quelle