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


в новом Google Maps API для 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);
      }
    }
  });
}

кто-нибудь есть идея получше?

9 75

9 ответов:

сигнатура метода для 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();

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

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

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

 marker.setVisible(false);

и сделать его видимым позже, когда это необходимо.
2. однако если вы хотите удалить все маркеры с карты использоватьmap.clear();
Примечание:map.clear(); также будут удалены Polylines, Circles etc.
3. если вы не хотите удалить Polylines, Circles etc. чем использовать петлю для длина маркера (если у вас несколько маркеров), чтобы удалить Проверьте пример здесьили установите их видимыми ложными и не используйте map.clear(); в таком случае.

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

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

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

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

создать глобальную переменную, чтобы отслеживать маркер

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

просто заметка, что-то, что я потратил часы на поиски сегодня вечером...

Если вы решили держаться за маркер по какой-то причине, после того, как вы удалили его с карты... getTag вернет NULL, даже если остальные значения get вернутся со значениями, которые вы установили для них при создании маркера...

значение тега имеет значение NULL, если вы когда-либо удаляете маркер, а затем пытаетесь ссылаться на него.

Мне кажется, что это ошибка...

создать массив со всеми маркерами на Добавить в карту.

позже, использовать:

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