- Introducción
- Cómo agregar varias capas de clústeres, KML y GeoJSON
- Cómo agregar tus propias funciones
- Cómo controlar los eventos de clic
- 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.