wake-up-neo.net

Entfernen Sie eine Markierung aus einer Google Map

In der neuen Google Maps-API für Android können wir eine Markierung hinzufügen , aber es gibt keine Möglichkeit, eine (leicht) entfernte zu entfernen.

Meine Lösung besteht darin, die Marker in einer Karte zu behalten und die Karte neu zu zeichnen, wenn ich einen Marker 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?

87
Jonas

Die Methodensignatur für addMarker lautet:

public final Marker addMarker (MarkerOptions options)

Wenn Sie also einer GoogleMap eine Markierung hinzufügen, indem Sie die Optionen für die Markierung angeben, sollten Sie das zurückgegebene Objekt Marker speichern (anstelle des MarkerOptions-Objekts, das Sie zur Erstellung verwendet haben). Mit diesem Objekt können Sie den Markierungsstatus später ändern. Wenn Sie mit der Markierung fertig sind, können Sie Marker.remove() aufrufen, um sie von der Karte zu entfernen.

Wenn Sie den Marker nur vorübergehend ausblenden möchten, können Sie die Sichtbarkeit des Markers durch Aufruf von Marker.setVisible(boolean) umschalten.

205
Anthony

um alle Skizzen in der Karte zu löschen 

map.clear()
20

Fügen Sie die Markierung auf diese Weise der Karte hinzu

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

Dann können Sie die Remove-Methode verwenden, da nur diese Markierung entfernt wird

markerName.remove();
20
Eclipse22

wenn Markierung vorhanden ist, letzte Markierung entfernen. Wenn keine Marke vorhanden ist, erstellen Sie eine aktuelle Marke

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

verwenden Sie den folgenden Code:

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

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

wenn Sie auf "eine Markierung" klicken, können Sie sie entfernen.

1
kuo chang

1. Wenn Sie eine Markierung entfernen möchten, können Sie dies als marker.remove();.__ tun. Alternativ können Sie die Markierung auch ausblenden, anstatt sie zu entfernen

 marker.setVisible(false);

und machen es später sichtbar, wann immer es nötig ist.
2. Wenn Sie jedoch alle Markierungen aus der Karte entfernen möchten Usemap.clear();
Hinweis:map.clear(); entfernt auch Polylines, Circles usw.
3. Wenn Sie Polylines, Circles usw. nicht entfernen möchten, verwenden Sie eine Schleife zur Länge der Markierung (wenn Sie mehrere Marken haben), um diese zu entfernen Schauen Sie sich das Beispiel hier anODER setze sie Visible false Und benutze map.clear(); in diesem Fall nicht.

1

Nur ein Hinweis, etwas, das ich Stunden damit verbracht habe, heute Nacht aufzuspüren ...

Wenn Sie sich entscheiden, einen Marker aus irgendeinem Grund zu entfernen, nachdem Sie ihn aus einer Map ENTFERNT haben ... GetTag gibt NULL zurück, obwohl die verbleibenden Get-Werte mit den Werten zurückkehren, auf die Sie sie gesetzt haben, als der Marker erstellt wurde. .

Der TAG-Wert wird auf NULL gesetzt, wenn Sie jemals einen Marker entfernen und dann versuchen, auf ihn zu verweisen.

Scheint mir ein Fehler zu sein ...

0
Speckpgh

Erstellen Sie ein Array mit allen Markierungen, die in der Karte hinzugefügt wurden.

Verwenden Sie später:

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

Erstellen Sie eine globale Variable, um die Markierung zu verfolgen 

private Marker currentLocationMarker;

// Alte Markierung entfernen

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

// Füge einen aktualisierten Marker hinzu und verschiebe die Kamera

            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