Cartes de densité

Sélectionnez une plate-forme : Android iOS JavaScript

Cette page décrit l'utilitaire de carte de densité disponible dans pour la SDK Maps pour iOS. Les cartes de densité sont utiles pour représenter la distribution et la densité des points de données sur une carte.

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

Les cartes de densité permettent aux utilisateurs de mieux comprendre la répartition et l'intensité des points de données sur une carte. Au lieu de placer un repère à chaque emplacement, les cartes thermiques utilisent des couleurs pour représenter la distribution des données.

Dans l'exemple ci-dessous, le rouge représente les zones où le niveau de concentration de la police est élevé. à Victoria, en Australie.

Carte avec une carte de densité montrant l'emplacement des commissariats
Carte de densité sur une carte

Si vous n'avez pas encore configuré la bibliothèque, suivez la procédure de configuration guide avant de lire la suite cette page.

Ajouter une carte de densité simple

Pour ajouter une carte de densité à votre carte, vous avez besoin d'un jeu de données composé des les coordonnées géographiques de chaque lieu d'intérêt. Tout d'abord, créez un Instance GMUHeatmapTileLayer, en définissant la propriété map sur GMSMapView. Faites-le dans la fonction viewDidLoad() de votre application, pour vous assurer que la carte de base est avant d'utiliser la carte thermique. Ensuite, transmettez une collection de GMUWeightedLatLng à l'instance GMUHeatmapTileLayer.

L'utilitaire fournit la classe GMUHeatmapTileLayer, qui accepte un collection d'objets GMUWeightedLatLng. Il crée les images de tuiles pour différents niveaux de zoom, en fonction des options de rayon, de dégradé et d'opacité. fournies.

Examinons les étapes plus en détail :

  1. Créez une instance GMUHeatmapTileLayer en définissant la propriété map sur une GMSMapView (dans la fonction viewDidLoad() de votre application).
  2. Transmettez une collection d'objets GMUWeightedLatLng à la GMUHeatmapTileLayer instance.
  3. Appelez GMUHeatmapTileLayer.map en transmettant la vue de la carte.

    Swift

    class Heatmap: UIViewController {
    
      private var mapView: GMSMapView!
      private var heatmapLayer: GMUHeatmapTileLayer!
    
      override func viewDidLoad() {
        super.viewDidLoad()
        heatmapLayer = GMUHeatmapTileLayer()
        heatmapLayer.map = mapView
      }
    
      // ...
    
      func addHeatmap() {
    
        // Get the data: latitude/longitude positions of police stations.
        guard let path = Bundle.main.url(forResource: "police_stations", withExtension: "json") else {
          return
        }
        guard let data = try? Data(contentsOf: path) else {
          return
        }
        guard let json = try? JSONSerialization.jsonObject(with: data, options: []) else {
          return
        }
        guard let object = json as? [[String: Any]] else {
          print("Could not read the JSON.")
          return
        }
    
        var list = [GMUWeightedLatLng]()
        for item in object {
          let lat = item["lat"] as! CLLocationDegrees
          let lng = item["lng"] as! CLLocationDegrees
          let coords = GMUWeightedLatLng(
            coordinate: CLLocationCoordinate2DMake(lat, lng),
            intensity: 1.0
          )
          list.append(coords)
        }
    
        // Add the latlngs to the heatmap layer.
        heatmapLayer.weightedData = list
      }
    }
          

    Objective-C

    @implementation Heatmap {
      GMSMapView *_mapView;
      GMUHeatmapTileLayer *_heatmapLayer;
    }
    
    - (void)viewDidLoad {
      [super viewDidLoad];
      _heatmapLayer = [[GMUHeatmapTileLayer alloc] init];
      _heatmapLayer.map = _mapView;
    }
    
    // ...
    
    - (void) addHeatmap {
    
      // Get the data: latitude/longitude positions of police stations.
      NSURL *path = [NSBundle.mainBundle URLForResource:@"police_stations" withExtension:@"json"];
      NSData *data = [NSData dataWithContentsOfURL:path];
      NSArray *json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
    
      NSMutableArray<GMUWeightedLatLng *> *list = [[NSMutableArray alloc] init];
      [json enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        NSDictionary *item = (NSDictionary *)obj;
        CLLocationDegrees lat = [(NSNumber *) [item valueForKey:@"lat"] doubleValue];
        CLLocationDegrees lng = [(NSNumber *) [item valueForKey:@"lng"] doubleValue];
        GMUWeightedLatLng *coords = [[GMUWeightedLatLng alloc] initWithCoordinate:CLLocationCoordinate2DMake(lat, lng)
                                                                        intensity:1.0];
        [list addObject:coords];
      }];
    
    
      // Add the latlngs to the heatmap layer.
      _heatmapLayer.weightedData = list;
    }
    @end
          

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 }
]

Personnaliser la carte de densité

La carte de densité comporte plusieurs propriétés personnalisables. Vous pouvez définir les options soit en créant l'instance GMUHeatmapTileLayer, soit à tout moment définir une nouvelle valeur pour l'option.

Les options suivantes sont disponibles :

  1. Rayon:taille du flou gaussien appliqué à la carte de densité, exprimée en pixels. La valeur par défaut est 20. Doit être compris entre 10 et 50. Utilisez GMUHeatmapTileLayer.radius pour définir le rayon.

  2. Dégradé:gamme de couleurs que la carte de densité utilise pour générer sa couleur. carte, en allant de la plus faible à la plus haute intensité. Un GMUGradient est créé à l'aide de un tableau d'entiers contenant les couleurs et un tableau float indiquant le point de départ de chaque couleur, indiqué en pourcentage de l'intensité maximale, et exprimé sous forme de fraction comprise entre 0 et 1. Vous devez spécifier une seule couleur pour un dégradé uni ou un minimum de deux couleurs pour un dégradé un dégradé. La carte de couleur est générée à l'aide d'une interpolation entre ces couleurs. Le dégradé par défaut a deux couleurs. Le paramètre colorMapSize définit le nombre de pas dans le gradient. Plus le nombre est élevé, plus le résultat est avec un gradient, tandis que des valeurs plus faibles donnent des transitions plus nettes, graphique de contouring. Utilisez GMUHeatmapTileLayer.gradient pour définir le dégradé.

  3. Opacité:opacité du calque de la carte de densité, des plages de 0 à 1. La valeur par défaut est 0,7. Utilisez GMUHeatmapTileLayer.opacity pour définir la opacité.

Par exemple, créez un Gradient:

Swift

let gradientColors: [UIColor] = [.green, .red]
let gradientStartPoints: [NSNumber] = [0.2, 1.0]
heatmapLayer.gradient = GMUGradient(
  colors: gradientColors,
  startPoints: gradientStartPoints,
  colorMapSize: 256
)
      

Objective-C

NSArray<UIColor *> *gradientColors = @[UIColor.greenColor, UIColor.redColor];
NSArray<NSNumber *> *gradientStartPoints = @[@0.2, @1.0];
_heatmapLayer.gradient = [[GMUGradient alloc] initWithColors:gradientColors
                                                 startPoints:gradientStartPoints
                                                colorMapSize:256];
      

Pour changer l'opacité d'une carte de densité existante :

Swift

heatmapLayer.opacity = 0.7
      

Objective-C

_heatmapLayer.opacity = 0.7;
      

Mettre à jour une option existante

Pour mettre à jour une option déjà définie, procédez comme suit:

  1. Mettez à jour l'option avec la valeur souhaitée.
  2. Appelez GMUHeatmapTileLayer.clearTileCache().

Modifier l'ensemble de données

Pour modifier l'ensemble de données sur lequel repose une carte de densité:

  1. Mettez à jour votre collecte de données. Utiliser GMUHeatmapTileLayer.weightedData, en transmettant un tableau de GMUWeightedLatLng.
  2. Appelez GMUHeatmapTileLayer.clearTileCache().

Supprimer une carte de densité

Pour supprimer une carte de densité, appelez GMUHeatmapTileLayer.map en transmettant nil.

Swift

heatmapLayer.map = nil
      

Objective-C

_heatmapLayer.map = nil;
      

Voir l'application de démonstration

Pour voir un autre exemple d'implémentation d'une carte de densité, consultez la HeatmapViewController dans l'application de démonstration fournie avec la bibliothèque d'utilitaires. Le guide de configuration vous explique comment exécutez l'application de démonstration.