Vous êtes prêt !

Pour passer à l'étape de développement, accédez à notre documentation pour les développeurs.

Activer Google Maps Android API

Pour commencer, nous allons vous guider à travers la console Google Developers et effectuer deux ou trois petites choses :

  1. Créer ou choisir un projet
  2. Activer Google Maps Android API
  3. Créer les clés appropriées
Continuer

Utilitaire de carte thermique Google Maps Android

Les cartes thermiques sont utiles pour représenter la répartition et la densité des points de données sur une carte.

Introduction

La bibliothèque d'utilitaires Google Maps Android API inclut un utilitaire de carte thermique, que vous pouvez utiliser pour ajouter une ou plusieurs cartes thermiques à une carte Google Map dans votre application.

Cette vidéo explique l'utilisation des cartes thermiques comme alternative aux marqueurs, lorsque vous avez besoin d'ajouter de nombreux points de données sur la carte.

Les cartes thermiques permettent aux utilisateurs de mieux comprendre la répartition et l'intensité relative des points de données sur une carte. Au lieu de placer un marqueur à chaque point géographique, les cartes thermiques utilisent des couleurs pour représenter la répartition des données.

Dans l'exemple ci-dessous, le rouge représente les zones avec une forte concentration de commissariats à Victoria, en Australie.

Une carte avec une carte thermique montrant l'emplacement des commissariats
Une carte thermique sur une carte

Si vous n'avez pas encore configuré la bibliothèque d'utilitaires Google Maps Android API, suivez les étapes du guide de configuration avant de poursuivre la lecture de cette page.

Ajouter une carte thermique simple

Pour ajouter une carte thermique à votre carte, vous devez disposer d'un jeu de données comprenant les coordonnées de chaque point géographique présentant un intérêt. Créez tout d'abord un HeatmapTileProvider, en lui spécifiant la collection d'objets LatLng. Créez ensuite un nouveau TileOverlay, en lui spécifiant le fournisseur de tuiles de carte thermique et ajoutez la superposition de tuiles à la carte.

L'utilitaire fournit la classe HeatmapTileProvider, qui implémente l'interface TileProvider pour fournir les images de tuiles destinées à la carte thermique. HeatmapTileProvider accepte une collection d'objets LatLng (ou d'objets WeightedLatLng, comme décrit ci-après). Il crée les images de tuile pour différents niveaux de zoom, en fonction des options de rayon, de gradient et d'opacité fournies. Vous pouvez modifier les valeurs par défaut de ces options.

Examinons les différentes étapes plus en détail :

  1. Utilisez HeatmapTileProvider.Builder(), en lui transmettant une collection d'objets LatLng afin d'ajouter un nouveau HeatmapTileProvider.
  2. Créez un nouvel objet TileOverlayOptions avec les options adéquates, y compris le HeatmapTileProvider.
  3. Appelez GoogleMap.addTileOverlay() pour ajouter la superposition à la carte.
private void addHeatMap() {
    List<LatLng> list = null;

    // Get the data: latitude/longitude positions of police stations.
    try {
        list = readItems(R.raw.police_stations);
    } catch (JSONException e) {
        Toast.makeText(this, "Problem reading list of locations.", Toast.LENGTH_LONG).show();
    }

    // Create a heat map tile provider, passing it the latlngs of the police stations.
    mProvider = new HeatmapTileProvider.Builder()
        .data(list)
        .build();
    // Add a tile overlay to the map, using the heat map tile provider.
    mOverlay = mMap.addTileOverlay(new TileOverlayOptions().tileProvider(mProvider));
}

private ArrayList<LatLng> readItems(int resource) throws JSONException {
    ArrayList<LatLng> list = new ArrayList<LatLng>();
    InputStream inputStream = getResources().openRawResource(resource);
    String json = new Scanner(inputStream).useDelimiter("\\A").next();
    JSONArray array = new JSONArray(json);
    for (int i = 0; i < array.length(); i++) {
        JSONObject object = array.getJSONObject(i);
        double lat = object.getDouble("lat");
        double lng = object.getDouble("lng");
        list.add(new LatLng(lat, lng));
    }
    return list;
}

Pour cet exemple, les données sont stockées dans un fichier JSON, police_stations.json. Voici un extrait du fichier :

[
{"lat" : -37.1886, "lng" : 145.708 } ,
{"lat" : -37.8361, "lng" : 144.845 } ,
{"lat" : -38.4034, "lng" : 144.192 } ,
{"lat" : -38.7597, "lng" : 143.67 } ,
{"lat" : -36.9672, "lng" : 141.083 }
]

Utiliser des points de latitude/longitude pondérés

Lors de la création d'un HeatmapTileProvider, vous pouvez lui transmettre une collection de coordonnées de latitude/longitude pondérées. Cela peut être utile si vous souhaitez souligner l'importance d'un ensemble de points géographiques en particulier.

Pour appliquer une pondération à des points géographiques spécifiques :

  1. Créez un nouveau WeightedLatLng pour chaque point géographique nécessitant une pondération. Indiquez la LatLng et un double représentant l'intensité requise. L'intensité indique l'importance, ou valeur, relative de ce point géographique. Plus la valeur est élevée, plus l'intensité de la couleur du gradient de la carte thermique est forte. Par défaut, la couleur la plus intense est le rouge.
  2. Appelez HeatmapTileProvider.Builder().weightedData(), au lieu de HeatmapTileProvider.Builder().data(), pour créer la carte thermique.

Personnaliser la carte thermique

Un certain nombre de propriétés de la carte thermique sont personnalisables. Vous pouvez définir les options au moment de la création, via les fonctions Builder. De même, vous pouvez modifier une option à tout moment en appelant le mutateur (setter) approprié sur le HeatmapTileProvider, puis en supprimant le cache des tuiles de la superposition afin de redessiner toutes les tuiles en tenant compte des nouvelles options.

Les options suivantes sont disponibles :

  1. Radius : Taille du flou gaussien appliqué à la carte thermique, exprimée en pixels. La valeur par défaut est 20. Doit être compris entre 10 et 50. Utilisez le radius() du Builder pour définir la valeur lors de la création de la carte thermique, ou modifiez la valeur par la suite avec setRadius().
  2. Gradient : Gamme de couleurs que la carte thermique utilise pour générer sa carte de couleur, de l'intensité la plus faible à la plus élevée. Un gradient est créé à l'aide de deux tableaux : un tableau de nombres entiers contenant les couleurs et un tableau de valeurs flottantes indiquant le point de départ de chaque couleur, fournies en tant que pourcentage de l'intensité maximale et exprimées sous forme de fraction de 0 à 1. Vous devez indiquer une seule couleur pour chaque gradient uni, ou un minimum de deux couleurs pour un gradient multicolore. La carte de couleur est générée à l'aide d'une interpolation entre ces couleurs. Le gradient par défaut a deux couleurs. Utilisez le gradient() du Builder pour définir la valeur lors de la création de la carte thermique, ou modifiez la valeur par la suite avec setGradient().
  3. Opacity : Il s'agit de l'opacité du calque de la carte thermique, comprise entre 0 et 1. La valeur par défaut est 0.7. Utilisez l'objet opacity() du Builder pour définir la valeur lors de la création de la carte thermique, ou modifiez la valeur par la suite avec setOpacity().

Par exemple, créez un Gradient pour définir le gradient avant d'ajouter la carte thermique :

// Create the gradient.
int[] colors = {
    Color.rgb(102, 225, 0), // green
    Color.rgb(255, 0, 0)    // red
};

float[] startPoints = {
    0.2f, 1f
};

Gradient gradient = new Gradient(colors, startPoints);

// Create the tile provider.
mProvider = new HeatmapTileProvider.Builder()
     .data(mList)
     .gradient(gradient)
     .build();

// Add the tile overlay to the map.
mOverlay = mMap.addTileOverlay(new TileOverlayOptions().tileProvider(mProvider));

Pour changer l'opacité d'une carte thermique existante :

  mProvider.setOpacity(0.7);
  mOverlay.clearTileCache();

Modifier le jeu de données

Pour modifier le jeu de données sur lequel la carte thermique est construite, utilisez HeatmapTileProvider.setData(), ou HeatmapTileProvider.setWeightedData() pour les points WeightedLatLng. Remarque : Si vous souhaitez ajouter des points à la carte thermique, ou en supprimer, mettez à jour votre collection de données, puis utilisez setData() ou setWeightedData().

  ArrayList<WeightedLatLng> data = new ArrayList<WeightedLatLng>();
  mProvider.setData(data);
  mOverlay.clearTileCache();

Supprimer une carte thermique

Supposons que vous avez ajouté cette carte thermique :
mProvider = new HeatmapTileProvider.Builder.data(data).build();
mOverlay = mMap.addTileOverlay(new
    TileOverlayOptions().tileProvider(mProvider));

Pour supprimer la carte thermique, vous devez supprimer la superposition de tuiles :

mOverlay.remove();

Voir l'application de démo

Pour voir un autre exemple d'implémentation de carte thermique, consultez l'activitéHeatmapsDemoActivity dans l'application de démo intégrée à la bibliothèque d'utilitaires. Le guide de configuration vous explique comment exécuter l'application de démo.

Envoyer des commentaires concernant…

Google Maps Android API
Google Maps Android API
Besoin d'aide ? Consultez notre page d'assistance.