Utilidad multicapa de Google Maps

Selecciona la plataforma: Android JavaScript
  1. Introducción
  2. Cómo agregar varias capas de clústeres, KML y GeoJSON
  3. Cómo agregar tus propias funciones
  4. Cómo controlar los eventos de clic
  5. Cómo consultar la app de demostración

Introducción

En los instructivos anteriores, aprendiste a agregar funciones de KML y GeoJSON a tu mapa, además de clústeres de marcadores. Pero ¿qué sucede si deseas agregar varias de estas capas en el mismo mapa y obtener eventos de clic independientes para cada una?

Cómo agregar varias capas de clústeres, KML y GeoJSON

La biblioteca incluye objetos Manager que te ayudan a administrar eventos de clic para varios tipos de capas. Por lo tanto, antes de configurar tus capas, primero deberás crear una instancia de estas y pasar el objeto GoogleMap:

Java


MarkerManager markerManager = new MarkerManager(map);
GroundOverlayManager groundOverlayManager = new GroundOverlayManager(map);
PolygonManager polygonManager = new PolygonManager(map);
PolylineManager polylineManager = new PolylineManager(map);

      

Kotlin


val markerManager = MarkerManager(map)
val groundOverlayManager = GroundOverlayManager(map!!)
val polygonManager = PolygonManager(map)
val polylineManager = PolylineManager(map)

      

A continuación, puedes pasar estas clases de administrador a los constructores de las demás capas cuando las configures:

Java


ClusterManager<MyItem> clusterManager = new ClusterManager<>(context, map, markerManager);
GeoJsonLayer geoJsonLineLayer = new GeoJsonLayer(map, R.raw.geojson_file, context, markerManager, polygonManager, polylineManager, groundOverlayManager);
KmlLayer kmlPolylineLayer = new KmlLayer(map, R.raw.kml_file, context, markerManager, polygonManager, polylineManager, groundOverlayManager, null);

      

Kotlin


val clusterManager =
    ClusterManager<MyItem>(context, map, markerManager)
val geoJsonLineLayer = GeoJsonLayer(
    map,
    R.raw.geojson_file,
    context,
    markerManager,
    polygonManager,
    polylineManager,
    groundOverlayManager
)
val kmlPolylineLayer = KmlLayer(
    map,
    R.raw.kml_file,
    context,
    markerManager,
    polygonManager,
    polylineManager,
    groundOverlayManager,
    null
)

      

Cómo agregar tus propias funciones

Si deseas agregar tus propios marcadores, superposiciones de suelo, polilíneas o polígonos junto con estas capas, crea tu propio objeto Collection y luego usa Managers para agregar la función, en lugar de agregarla directamente al objeto GoogleMap. Por ejemplo, si deseas agregar un marcador nuevo:

Java


MarkerManager.Collection markerCollection = markerManager.newCollection();
markerCollection.addMarker(new MarkerOptions()
    .position(new LatLng(51.150000, -0.150032))
    .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE))
    .title("Unclustered marker"));

      

Kotlin


val markerCollection =
    markerManager.newCollection()
markerCollection.addMarker(
    MarkerOptions()
        .position(LatLng(51.150000, -0.150032))
        .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE))
        .title("Unclustered marker")
)

      

Cómo controlar los eventos de clic

Para los clústeres, KML y GeoJSON, los objetos de escucha de clics funcionan de forma normal, siempre y cuando pases las clases Manager al constructor de la capa que estás configurando. Por ejemplo, a continuación se muestra cómo configurar un objeto de escucha de clics para la capa KML:

Java


kmlPolylineLayer.addLayerToMap();
kmlPolylineLayer.setOnFeatureClickListener(feature -> Toast.makeText(context,
    "KML polyline clicked: " + feature.getProperty("name"),
    Toast.LENGTH_SHORT).show());

      

Kotlin


kmlPolylineLayer.addLayerToMap()
kmlPolylineLayer.setOnFeatureClickListener { feature: Feature ->
    Toast.makeText(context,
        "KML polyline clicked: ${feature.getProperty("name")}",
        Toast.LENGTH_SHORT
    ).show()
}

      

Cuando agregues tus propios marcadores, superposiciones de suelo, polilíneas o polígonos, asegúrate de agregar objetos de escucha de clics a esos objetos Collection. Por ejemplo, a continuación, se muestra cómo configurar el objeto de escucha de clics de un marcador en markerCollection:

Java


markerCollection.setOnMarkerClickListener(marker -> { Toast.makeText(context,
    "Marker clicked: " + marker.getTitle(),
        Toast.LENGTH_SHORT).show();
    return false;
});

      

Kotlin


markerCollection.setOnMarkerClickListener { marker: Marker ->
    Toast.makeText(
        context,
        "Marker clicked: ${marker.title}",
        Toast.LENGTH_SHORT
    ).show()
    false
}

      

Cómo consultar la app de demostración

Para ver un ejemplo de cómo agregar varias capas, consulta MultiLayerDemoActivity en la app de demostración que se incluye en la biblioteca de utilidades. En la guía de configuración, se muestra cómo ejecutar la app de demostración.