Cómo obtener un marcador de mapa por su ID en Google Maps v2

Básicamente cuando se agrega un marcador al mapa, se devuelve el nuevo marcador y se puede obtener el identificador del mismo como si

Marker m = map.addMarker(new MarkerOptions() .position(new LatLng(lat,lon))); String id = m.getId(); 

¿Hay una manera de conseguir un marcador por su identificación si hay muchos marcadores y usted apenas desea suprimir uno?

El problema es que el identificador de marcador se genera automaticlly y no se puede utilizar para el seguimiento de los marcadores individualmente. Se han propuesto varias estrategias en torno a esto. Uno sería usar un mapa hash para rastrear marcadores y luego usar una clave que elija para encontrar un marcador específico y eliminarlo. Otra idea es sobrecargar uno de los campos marcadores, como un fragmento, y luego agregar una clave a ti mismo. Por ejemplo, si estaba haciendo un nuevo marcador (utilizando el código de ejemplo de google), podría poner su propia cadena de claves en el campo de fragmentos

 mMap.addMarker(new MarkerOptions() .position(MELBOURNE) .title("Melbourne") .snippet(KEY + "Population: 4,137,400")); 

Más tarde, podrías recuperar esa clave usando

 String s = marker.getSnippet() String key = s.substring(start, end) 

Y luego usar un condicional para eliminar un marcador específico si es una coincidencia. Dependiendo de lo que necesites hacer un enfoque mi ser más fácil y más eficiente que otro.

He hecho de esta manera:

Inicializar variables :

 private GoogleMap mMap; private HashMap<Marker, Integer> mHashMap = new HashMap<Marker, Integer>(); private ArrayList<MyCustomModelClass> myList = new ArrayList<MyCustomModelClass>(); 

Añadir marcador en google map usando su arraylist :

 for (int i = 0; i < myList.size(); i++) { double latitude = myList.getLatitude(); double longitude = myList.getLongitude(); Marker marker = mMap.addMarker(new MarkerOptions().position(new LatLng(latitude,longitude))).title(myList.getTitle()) .icon(BitmapDescriptorFactory.fromResource(R.drawable.location_icon)); mHashMap.put(marker, i); } 

En el oyente de clics de marcador :

 @Override public boolean onMarkerClick(Marker marker) { int pos = mHashMap.get(marker); Log.i("Position of arraylist", pos+""); } 

Espero que esto te ayudará.

Utilice WeakHashMap<Integer,Marker> para almacenar marcadores porque de esta manera, no mantendremos una referencia a un Marcador en la memoria, y no tendríamos que preocuparnos por los marcadores de recolección de basura.

En segundo lugar la forma recomendada de hacerlo es tener un WeakHashMap con ID y sus datos personalizados. La documentación indica que el objeto marcador puede cambiar, por lo que no utilice el marcador como clave. Si la actividad se destruye y se restaura pero el ID permanecerá igual. En algún momento puede devolver null también si los objetos marcadores cambiaron.

 WeakHashMap<Integer,Marker> obj = new WeakHashMap <Integer,Marker>(); 

Espero que ayude a los futuros espectadores …

La mejor manera de hacer esto es usando un Map <int, Mark> dictionaryMark; .

Simplemente agrega la marca en tu diccionario cada vez que la dibujas.

  • Google Maps Android V2 - Pantalla en blanco
  • Utilice google map en cualquier dispositivo. (Sin jugar de google)
  • Grupo de mapas de Google con dirección
  • Android Maps API v2 dibujar círculo
  • El marcador del mapa de Google se reemplaza por el rectángulo delimitador en el zoom
  • PlaceAutoCompleteFragment en android no muestra sugerencias y se cierra después de ingresar la primera letra
  • Google Maps, no hay opción para iniciar la navegación, sólo la vista previa está allí
  • El tamaño del mapa IllegalStateException no debe ser 0
  • Posicionamiento de Google Maps v2 zoom en controles en Android
  • Agregar barra de herramientas de búsqueda sobre google map como en la aplicación nativa de Android
  • Cómo encontrar la distancia (por carretera) entre 2 puntos geo en la aplicación de Android sin utilizar google map direction api?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.