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 demo

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:

Kotlin



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

      

Java


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

      

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

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
)

      

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

      

Cómo agregar tus propios componentes

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:

Kotlin



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

      

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

      

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:

Kotlin



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

      

Java


kmlPolylineLayer.addLayerToMap();
kmlPolylineLayer.setOnFeatureClickListener(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:

Kotlin



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

      

Java


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

      

Consulta la app de demo

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