Удалить маркер из GoogleMap

В новом API Карт Google для Android мы можем добавить маркер , но нет способа (легко) его удалить.

Мое решение состоит в том, чтобы сохранить маркеры на карте и перерисовать карту, когда я хочу удалить маркер, но он не очень эффективен.

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); } } }); } 

Кто-нибудь имеет лучшую идею?

Solutions Collecting From Web of "Удалить маркер из GoogleMap"

Подпись метода для addMarker :

 public final Marker addMarker (MarkerOptions options) 

Поэтому, когда вы добавляете маркер в GoogleMap , указав параметры маркера, вы должны сохранить возвращаемый объект Marker (вместо объекта MarkerOptions который вы использовали для его создания). Этот объект позволяет впоследствии изменить состояние маркера. Когда вы закончите с маркером, вы можете вызвать Marker.remove() чтобы удалить его с карты.

В стороне, если вы хотите временно скрыть его, вы можете переключить видимость маркера, вызывая Marker.setVisible(boolean) .

Очистить все каракули на карте

 map.clear() 

Добавьте маркер на карту следующим образом:

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

Тогда вы сможете использовать метод remove, он удалит только этот маркер

 markerName.remove(); 

1. Если вы хотите удалить маркер, вы можете сделать это как marker.remove(); В качестве альтернативы вы также можете скрыть маркер, а не удалять его как

  marker.setVisible(false); 

И сделать его видимым позже, когда это необходимо.
2. Однако если вы хотите удалить все маркеры с карты Используйте map.clear();
Примечание: map.clear(); Также удалит Polylines, Circles и т. Д.
3. Если вы не хотите удалять Polylines, Circles и т. Д., Чем использовать цикл для длины маркера (если у вас есть несколько маркеров), чтобы удалить их. Проверьте здесь пример или установите их. Visible false И не используйте map.clear(); в таком случае.

Если маркер существует, удалите последний маркер. Если маркер не существует, создайте текущий маркер

 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))); } 

Сделать глобальную переменную для отслеживания маркера

 private Marker currentLocationMarker; 

// Удаление старого маркера

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

// Добавить обновленный маркер и переместить камеру

  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(); 

Создайте массив со всеми маркерами для добавления в карту.

Позже используйте:

 Marker temp = markers.get(markers.size() - 1); temp.remove();