Eso es todo.

Para comenzar a desarrollar, consulta nuestra documentación para desarrolladores.

Activar la Google Maps Android API

Para que puedas comenzar, te proporcionaremos orientación en la Google Developers Console a fin de que hagas primero algunas acciones:

  1. Crear o seleccionar un proyecto
  2. Activar la Google Maps Android API
  3. Crear claves correspondientes
Continuar

Utilidad de agrupación de marcadores en clústeres para Google Maps en Android

Al agrupar tus marcadores en clústeres, puedes disponer muchos marcadores en un mapa sin que esto dificulte la lectura de este.

Introducción

En este video se discute el uso de la agrupación de marcadores en clústeres cuando para tus datos se necesitan muchos puntos de datos en el mapa.

La agrupación de marcadores en clústeres te permite administrar varios marcadores con diferentes niveles de zoom. Para ser precisos, los “marcadores” en este punto son “elementos” y solo se convierten en “marcadores” al representarse. No obstante, a fin de garantizar una mayor claridad, se usará la denominación “marcador” en todo el documento.

Cuando un usuario visualiza el mapa con un alto nivel de zoom, los marcadores aparecen en él. Cuando el usuario aplica zoom de alejamiento, los marcadores se agrupan en clústeres para facilitar la visualización del mapa. La utilidad de agrupación de marcadores en clústeres forma parte de la biblioteca de utilidades de la Google Maps Android API. Si aún no configuraste la biblioteca, sigue la guía de configuración antes de leer el resto de esta página.

Mapa con marcadores agrupados en clústeres
Marcadores agrupados en clústeres

Para usar la utilidad de agrupación de marcadores en clústeres, deberás agregar marcadores como objetos ClusterItem al ClusterManager. ClusterManager pasa los marcadores a Algorithm y este los transforma en un conjunto de clústeres. ClusterRenderer se encarga de la representación; agrega y elimina marcadores individuales y clústeres. ClusterRenderer y Algorithm son acoplables y admiten personalización.

En la biblioteca de utilidades se incluye una aplicación de demostración en la que se ofrecen ejemplos de implementaciones de la utilidad de agrupación de marcadores en clústeres. Para obtener asistencia en la ejecución de la aplicación de demostración, consulta la guía de configuración. En la aplicación de demostración se incluyen los siguientes ejemplos de agrupación de marcadores en clústeres:

  • ClusteringDemoActivity: una actividad simple en la que se demuestra la agrupación de marcadores en clústeres.
  • ClusteringDemoActivity: agrupación en clústeres con 2000 marcadores.
  • CustomMarkerClusteringDemoActivity: creación de un diseño personalizado para marcadores agrupados en clústeres.

Agregar un clúster de marcadores simple

Sigue los pasos que aparecen a continuación para crear un clúster simple de diez marcadores. El resultado tendrá el siguiente aspecto, aunque el número de marcadores que se muestren o aparezcan agrupados cambiará según el nivel de zoom:

Mapa con diez marcadores agrupados en clústeres
Diez marcadores agrupados en clústeres

A continuación, se ofrece un resumen de los pasos que deben seguirse:

  1. Implementa ClusterItem para representar un marcador en el mapa. El elemento de clúster devuelve la posición del marcador como un objeto LatLng.
  2. Agrega un nuevo elemento ClusterManager para agrupar los elementos de clústeres (marcadores) según el nivel de zoom.
  3. Fija el elemento OnCameraIdleListener() del mapa en ClusterManager, ya que ClusterManager implementa el receptor.
  4. Si deseas agregar funcionalidades específicas en respuesta a un evento de clic de marcador, configura el método OnMarkerClickListener() del mapa en ClusterManager, ya que ClusterManager implementa el receptor.
  5. Transmite los marcadores a ClusterManager.

Una vista detallada de los pasos: Para crear el clúster simple de diez marcadores, primero crea una clase MyItem con la que se implemente ClusterItem.

public class MyItem implements ClusterItem {
    private final LatLng mPosition;

    public MyItem(double lat, double lng) {
        mPosition = new LatLng(lat, lng);
    }

    @Override
    public LatLng getPosition() {
        return mPosition;
    }
}

En tu actividad de mapa, agrega ClusterManager y transmítele los elementos del clúster. Considera el argumento de tipo <MyItem>, el cual declara que ClusterManager corresponde al tipo MyItem.

// Declare a variable for the cluster manager.
private ClusterManager<MyItem> mClusterManager;

private void setUpClusterer() {
    // Position the map.
    getMap().moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(51.503186, -0.126446), 10));

    // Initialize the manager with the context and the map.
    // (Activity extends context, so we can pass 'this' in the constructor.)
    mClusterManager = new ClusterManager<MyItem>(this, getMap());

    // Point the map's listeners at the listeners implemented by the cluster
    // manager.
    getMap().setOnCameraIdleListener(mClusterManager);
    getMap().setOnMarkerClickListener(mClusterManager);

    // Add cluster items (markers) to the cluster manager.
    addItems();
}

private void addItems() {

    // Set some lat/lng coordinates to start with.
    double lat = 51.5145160;
    double lng = -0.1270060;

    // Add ten cluster items in close proximity, for purposes of this example.
    for (int i = 0; i < 10; i++) {
        double offset = i / 60d;
        lat = lat + offset;
        lng = lng + offset;
        MyItem offsetItem = new MyItem(lat, lng);
        mClusterManager.addItem(offsetItem);
    }
}

Personalizar los clústeres de marcadores

El constructor ClusterManager crea una clase DefaultClusterRenderer y una clase NonHierarchicalDistanceBasedAlgorithm. Puedes cambiar ClusterRenderer y Algorithm con los métodos setAlgorithm(Algorithm<T> algorithm) y setRenderer(ClusterRenderer<T> view) de ClusterManager.

También puedes implementar ClusterRenderer para personalizar la representación de los clústeres. DefaultClusterRenderer proporciona una buena base como punto de partida. Al crear una subclase de DefaultClusterRenderer, puedes invalidar los valores predeterminados.

Para hallar un ejemplo exhaustivo de la personalización, observa CustomMarkerClusteringDemoActivity en la aplicación de demostración que se incluye con la biblioteca de utilidades.

Mapa con marcadores agrupados en clústeres personalizados
Marcadores agrupados en clústeres personalizados

CustomMarkerClusteringDemoActivity define su propio elemento de clúster, Person, y lo representa extendiendo la clase DefaultClusterRenderer como PersonRenderer.

En la demostración también se muestra la manera de implementar la interfaz ClusterManager.OnClusterClickListener<Person> para mostrar más información sobre la persona cuando se hace clic en el clúster. También puedes implementar ClusterManager.OnClusterItemClickListener<Person> de una manera similar.

Para obtener asistencia en la ejecución de la aplicación de demostración, consulta la guía de configuración.

Enviar comentarios sobre...

Google Maps Android API
Google Maps Android API
Si necesitas ayuda, visita nuestra página de asistencia.