Подтвердить что ты не робот

Удалить маркер из 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);
      }
    }
  });
}

Есть ли у кого-то лучшее представление?

4b9b3361

Ответ 1

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

public final Marker addMarker (MarkerOptions options)

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

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

Ответ 2

чтобы очистить все каракули на карте, используйте

map.clear()

Ответ 3

Добавьте маркер к карте, подобный этому

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

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

markerName.remove();

Ответ 4

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

 marker.setVisible(false);

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

Ответ 5

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

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

Ответ 6

используйте следующий код:

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

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

как только вы нажмете "маркер" , его можно удалить.

Ответ 7

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

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

Ответ 8

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

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

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