Vous êtes prêt !

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

Activer Google Maps SDK for iOS

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 SDK for iOS
  3. Créer les clés appropriées
Continuer

Calques de tuiles

Vous pouvez ajouter des images au-dessus de votre carte sous la forme d'un calque de tuiles. Les calques de tuiles sont placés par-dessus une tuile de carte à un niveau de zoom spécifique. Avec suffisamment de tuiles, vous pouvez compléter les données de carte de Google pour l'intégralité de la carte, à plusieurs niveaux de zoom.

Introduction

Les calques de tuiles (parfois appelés superpositions de tuiles) vous permettent de superposer des images sur les tuiles de carte de base de Google. Il s'agit d'une excellente manière d'ajouter des données - comme des points d'intérêt ou des informations sur la circulation routière - et des images locales à votre application. Lorsqu'ils sont associés au type de carte kGMSTypeNone, les calques de tuiles vous permettent de remplacer efficacement les données de carte de base de Google par vos propres données.

Les calques de tuiles sont utiles si vous souhaitez ajouter à la carte un grand nombre d'images, couvrant généralement de grandes zones géographiques. Inversement, les [superpositions au sol][superpositions] sont utiles lorsque vous souhaitez fixer une seule image sur un seul point de la carte.

Coordonnées de tuile

Maps API divise les images à chaque niveau de zoom en un jeu de tuiles de carte carrées organisées dans une grille ordonnée. Lorsqu'une carte défile vers un nouveau point géographique, ou que le niveau de zoom change, Maps API détermine quelles tuiles sont nécessaires et convertit ces informations en un ensemble de tuiles à extraire.

Dans le cadre de l'implémentation de la projection de Mercator par Google, la tuile avec les coordonnées (0,0) est toujours située dans l'angle nord-ouest de la carte, avec les valeurs x augmentant d'ouest en est et les valeurs y augmentant du nord au sud. Les tuiles sont indexées au moyen des coordonnées x,y à partir de cette origine. Au niveau de zoom 2, par exemple, lorsque la Terre est divisée en 16 tuiles, chaque tuile peut être désignée par une paire x,y unique :

Chaque tuile de carte est un carré de 256x256 points. À un niveau de zoom 0, le monde entier est rendu sous la forme d'une tuile unique. Chaque niveau de zoom augmente le grossissement avec un facteur de deux. Ainsi, à un niveau de zoom 1, le rendu de la carte est effectué sous forme de grille de tuiles de 2x2, ou de grille de 4x4 à un niveau de zoom 2, ou de grille de 8x8 à un niveau de zoom 3, et ainsi de suite. Si vous créez des images pour un calque de tuiles, vous devez créer une image de 256x256 points pour chaque tuile à chaque niveau de zoom que vous souhaitez prendre en charge.

Ajouter un calque de tuiles

  1. Instanciez un objet GMSURLTileLayer ou une sous-classe personnalisée de GMSTileLayer/GMSSyncTileLayer.
  2. Vous pouvez éventuellement modifier la propriété zIndex pour ajuster sa position par rapport aux autres calques de tuiles.
  3. Attribuez l'objet GMSTileLayer à la carte en définissant sa propriété map.

Google Maps SDK for iOS fournit trois classes pouvant être utilisées pour implémenter un calque de tuiles. Avec chaque classe, vous devez définir comment extraire la tuile de carte correcte pour un ensemble donné de coordonnées {x,y,zoom}. Les options disponibles sont les suivantes :

  • Sous-classe GMSSyncTileLayer, fournissant l'implémentation de tileForX:y:zoom qui renvoie des instances UIImage.
  • Sous-classe GMSTileLayer, fournissant l'implémentation de la méthode asynchrone requestTileForX:y:zoom qui est rappelée ultérieurement avec une image de tuile.
  • Utilisez la classe existante, GMSURLTileLayer, pour extraire automatiquement des tuiles depuis des URL, en fournissant le bloc GMSTileURLConstructor. GMSURLTileLayer est une classe concrète qui ne peut pas être sous-classée.

Dans le cas du sous-classement de GMSSyncTileLayer ou de GMSTileLayer, l'obtention d'un résultat de tuile nil indique à Google Maps SDK for iOS que les données sont actuellement indisponibles mais qu'elles pourront être disponibles. Vous pouvez également renvoyer kGMSTileLayerNoTile pour indiquer qu'il n'y a aucune tuile pour ce lieu.

Pour GMSURLTileLayer, le renvoi de nil à partir de GMSTileURLConstructor indique qu'il n'y a pas de tuile pour ce lieu.

Utiliser GMSURLTileLayer pour extraire des tuiles à partir d'URL

GMSURLTileLayer Ne nécessite pas de sous-classement, mais vous devez implémenter le bloc GMSTileURLConstructor. Le code ci-dessous montre comment utiliser GMSURLTileLayer pour afficher le plan d'étage d'un bâtiment à plusieurs étages.

Swift

let floor = 1

// Implement GMSTileURLConstructor
// Returns a Tile based on the x,y,zoom coordinates, and the requested floor
let urls: GMSTileURLConstructor = {(x, y, zoom) in
  let url = "https://www.example.com/floorplans/L\(floor)_\(zoom)_\(x)_\(y).png"
  return URL(string: url)
}

// Create the GMSTileLayer
let layer = GMSURLTileLayer(urlConstructor: urls)

// Display on the map at a specific zIndex
layer.zIndex = 100
layer.map = mapView

Objective-C

NSInteger floor = 1;

// Implement GMSTileURLConstructor
// Returns a Tile based on the x,y,zoom coordinates, and the requested floor
GMSTileURLConstructor urls = ^(NSUInteger x, NSUInteger y, NSUInteger zoom) {
  NSString *url = [NSString stringWithFormat:@"https://www.example.com/floorplans/L%ld_%lu_%lu_%lu.png",
                   (long)floor, (unsigned long)zoom, (unsigned long)x, (unsigned long)y];
  return [NSURL URLWithString:url];
};

// Create the GMSTileLayer
GMSURLTileLayer *layer = [GMSURLTileLayer tileLayerWithURLConstructor:urls];

// Display on the map at a specific zIndex
layer.zIndex = 100;
layer.map = mapView;

Sous-classer GMSSyncTileLayer pour utiliser des tuiles en tant que UIImage

GMSSyncTileLayer et GMSTileLayer sont des classes abstraites destinées à être sous-classées. Vous pouvez employer ces classes pour utiliser les tuiles en tant qu'éléments UIImage. L'exemple ci-dessous montre comment effectuer le rendu d'une image personnalisée au-dessus de certaines des tuiles de la carte en sous-classant GMSSyncTileLayer.

Swift

class TestTileLayer: GMSSyncTileLayer {
  override func tileFor(x: UInt, y: UInt, zoom: UInt) -> UIImage? {
    // On every odd tile, render an image.
    if (x % 2 == 0) {
      return UIImage(named: "australia")
    } else {
      return kGMSTileLayerNoTile
    }
  }
}

Objective-C

@interface TestTileLayer : GMSSyncTileLayer
@end

@implementation TestTileLayer

- (UIImage *)tileForX:(NSUInteger)x y:(NSUInteger)y zoom:(NSUInteger)zoom {
  // On every odd tile, render an image.
  if (x % 2) {
    return [UIImage imageNamed:@"australia"];
  } else {
    return kGMSTileLayerNoTile;
  }
}

@end

Pour ajouter le calque à votre carte, instanciez l'objet et définissez ses propriétés de carte.

Swift

let layer = TestTileLayer()
layer.map = mapView

Objective-C

GMSTileLayer *layer = [[TestTileLayer alloc] init];
layer.map = mapView;

Tuiles haute résolution pour appareils Retina

Vous pouvez utiliser des images haute résolution avec GMSSyncTileLayer ou GMSURLTileLayer en définissant tileSize sur 512. La propriété tileSize indique le nombre de pixels que les images de tuiles renvoyées privilégieront pour l'affichage ; la valeur par défaut est de 256 — c'est-à-dire la dimension d'une tuile Google Maps sur un appareil non Retina.

Si vous affichez des tuiles de résolution normale sur un appareil haute résolution, vous pouvez augmenter la taille des images en définissant la tileSize sur 512. Notez que l'augmentation de la taille des images peut en réduire la qualité, notamment pour les lignes fines ou le texte. Pour de meilleurs résultats, adaptez la tileSize et la résolution de l'image à l'écran. Les cartes affichées sur un appareil Retina seront du plus bel effet avec des images hautes résolution et une tileSize de 512 ; en revanche, des images normales et la valeur de tileSize de 256 par défaut conviennent parfaitement pour l'affichage de cartes sur un appareil non Retina.

Remarque : Les valeurs inférieures à 256 ne sont pas recommandées pour les appareils Retina.

Effacer des tuiles obsolètes

Si les tuiles fournies par le calque deviennent « obsolètes », la méthode clearTileCache doit être appelée sur le calque pour forcer l'actualisation. Cela permettra de recharger toutes les tuiles de ce calque.

Swift

layer.clearTileCache()

Objective-C

[layer clearTileCache];

Envoyer des commentaires concernant…

Google Maps SDK for iOS
Google Maps SDK for iOS
Besoin d'aide ? Consultez notre page d'assistance.