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

Quadtree

Cette page décrit l'utilitaire quadtree disponible dans la bibliothèque d'utilitaires pour le Google Maps SDK for iOS.

Un quadtree est une structure de données particulièrement utile pour identifier des points situés près d'un point spécifique, en les recherchant dans la zone entourant le point d'intérêt.

Avec un quadtree, vous pouvez rechercher de manière efficace des points dans une plage de valeurs 2D, où ces points sont définis en tant que coordonnées de latitude/longitude ou coordonnées cartésiennes (x, y). Le quadtree stocke les ensembles de coordonnées dans des nœuds et les indexe par région (zone de délimitation). Pour trouver une paire de coordonnées spécifique, il suffit de passer d'un nœud à l'autre dans le quadtree.

Prérequis et remarques

L'utilitaire quadtree fait partie de la bibliothèque d'utilitaires pour Google Maps SDK for iOS. Si vous n'avez pas encore configuré cette bibliothèque, suivez le guide de configuration avant de poursuivre la lecture de cette page.

Ajouter un quadtree et rechercher des points dans une zone donnée

Le code suivant créée un quadtree, puis recherche tous les points dans une zone donnée :

Swift

// Assume that <Google-Maps-iOS-Utils/GQTPointQuadTree.h> is in the bridging-header file.

class QuadTreeItem : NSObject, GQTPointQuadTreeItem {
  let gqtPoint : GQTPoint

  init(point : GQTPoint) {
    self.gqtPoint = point
  }

  func point() -> GQTPoint {
    return gqtPoint
  }
}

// Create a quadtree with bounds of [-2, -2] to [2, 2].
let bounds = GQTBounds(minX: -2, minY: -2, maxX: 2, maxY: 2)
let tree = GQTPointQuadTree(bounds: bounds)

// Add 4 points to the tree.
tree.add(QuadTreeItem(point: GQTPoint(x: -1, y: -1)))
tree.add(QuadTreeItem(point: GQTPoint(x: -1, y: 1)))
tree.add(QuadTreeItem(point: GQTPoint(x: 1, y: 1)))
tree.add(QuadTreeItem(point: GQTPoint(x: 1, y: -1)))

// Search for items within the rectangle with lower corner of (-1.5, -1.5)
// and upper corner of (1.5, 1.5).
let searchBounds = GQTBounds(minX: -1.5, minY: -1.5, maxX: 1.5, maxY: 1.5)
for item in tree.searchWithBounds(searchBounds) as! [QuadTreeItem] {
  NSLog("(\(item.point().x), \(item.point().y))");
}

Objective-C

#import <Google-Maps-iOS-Utils/GQTPointQuadTree.h>

@interface QuadTreeItem : NSObject<GQTPointQuadTreeItem>
- (instancetype)initWithPoint:(GQTPoint)point;
@end

@implementation QuadTreeItem {
  GQTPoint _point;
}

- (instancetype)initWithPoint:(GQTPoint)point {
  if ((self = [super init])) {
    _point = point;
  }
  return self;
}

- (GQTPoint)point {
  return _point;
}

@end

int main(int argc, char* argv[]) {
  // Create a quadtree with bounds of [-2, -2] to [2, 2].
  GQTBounds bounds = {-2, -2, 2, 2};
  GQTPointQuadTree *tree = [[GQTPointQuadTree alloc] initWithBounds:bounds];

  // Add 4 points to the tree.
  [tree add:[[QuadTreeItem alloc] initWithPoint:(GQTPoint){-1, -1}]];
  [tree add:[[QuadTreeItem alloc] initWithPoint:(GQTPoint){-1, 1}]];
  [tree add:[[QuadTreeItem alloc] initWithPoint:(GQTPoint){1, 1}]];
  [tree add:[[QuadTreeItem alloc] initWithPoint:(GQTPoint){1, -1}]];

  // Search for items within the rectangle with lower corner of (-1.5, -1.5)
  // and upper corner of (1.5, 1.5).
  NSArray *foundItems = [tree searchWithBounds:(GQTBounds){-1.5, -1.5, 1.5, 1.5}];

  for (QuadTreeItem *item in foundItems) {
    NSLog(@"(%lf, %lf)", item.point.x, item.point.y);
  }
  return 0;
}

Envoyer des commentaires concernant…

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