Utilitaire multicalque de Google Maps

  1. Introduction
  2. Ajouter plusieurs calques de groupe, KML et GeoJSON
  3. Ajouter vos propres éléments géographiques
  4. Gérer les événements de clic
  5. Voir l'application de démonstration

Introduction

Dans les précédents tutoriels, vous avez découvert comment ajouter des éléments géographiques KML et GeoJSON à votre carte, ainsi que des groupes de repères. Mais comment ajouter plusieurs de ces calques sur la même carte et obtenir des événements de clic indépendants pour chacun d'entre eux ?

Ajouter plusieurs calques de groupe, KML et GeoJSON

La bibliothèque comprend des Managerobjets permettant de gérer les événements de clic de plusieurs types de calques. Par conséquent, avant de configurer les calques, vous devez d'abord les instancier et les transmettre dans votre 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)
      

Vous pouvez ensuite transmettre ces classes de gestionnaire aux constructeurs des autres calques au moment de leur configuration :

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
)
      

Ajouter vos propres éléments géographiques

Si vous souhaitez ajouter vos propres repères, superpositions au sol, polylignes ou polygones à côté de ces calques, créez votre propre Collection, puis utilisez les Managers pour ajouter les éléments géographiques au lieu de les ajouter directement à l'objet GoogleMap. Par exemple, si vous souhaitez ajouter un repère :

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

Gérer les événements de clic

Pour les clusters, KML et GeoJSON, les écouteurs de clics fonctionnent de manière normale, à condition que vous transmettiez les classes Manager dans le constructeur du calque que vous définissez. Par exemple, voici comment configurer un écouteur de clic pour le calque 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()
}
      

Lorsque vous ajoutez vos propres repères, superpositions au sol, polylignes ou polygones, assurez-vous simplement d'ajouter des écouteurs de clics à ces objets Collection. Par exemple, voici comment configurer l'écouteur de clic du repère sur le 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
}
      

Voir l'application de démonstration

Pour savoir comment ajouter plusieurs calques, consultez MultiLayerDemoActivity dans l'application de démonstration fournie avec la bibliothèque d'utilitaires. Le guide de configuration vous explique comment exécuter l'application de démonstration.