क्वाडट्री

इस पेज पर, क्वाडट्री यूटिलिटी के बारे में बताया गया है. यूटिलिटी लाइब्रेरी iOS के लिए Maps SDK के लिए.

क्वाडट्री एक डेटा स्ट्रक्चर है, जिसकी मदद से बिंदु, लोकप्रिय जगह के आस-पास के क्षेत्र में खोजकर.

क्वाडट्री का इस्तेमाल करके, 2D रेंज में पॉइंट आसानी से खोजे जा सकते हैं, जहां उन बिंदुओं को lat/lng निर्देशांक या कार्टेशियन (x, y) के रूप में परिभाषित किया जाता है निर्देशांक. क्वाडट्री, नोड और इंडेक्स में निर्देशांक की बकेट को स्टोर करता है क्षेत्र के हिसाब से उन्हें इस्तेमाल करें (बाउंडिंग बॉक्स). कोई दिया गया निर्देशांक युग्म खोजने के लिए, आपको पार करना है यह क्वाडट्री की नोड से होकर गुज़रता है.

ज़रूरी शर्तें और ज़रूरी जानकारी

क्वाडट्री उपयोगिता iOS के लिए Maps SDK यूटिलिटी लाइब्रेरी. अगर आपने अब तक लाइब्रेरी सेट अप नहीं की है, तो सेटअप गाइड का पालन करें कृपया ध्यान दें.

क्वाडट्री जोड़ना और दिए गए क्षेत्र में बिंदुओं की खोज करना

यह कोड एक क्वाडट्री बनाता है, फिर उसमें मौजूद सभी बिंदुओं की खोज करता है दिए गए हिस्से में:

Swift

import GoogleMapsUtils

class QuadTreeItem : NSObject, GQTPointQuadTreeItem {
  private let gqtPoint : GQTPoint

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

  func point() -> GQTPoint {
    return gqtPoint
  }

  /// Function demonstrating how to create and use a quadtree
  private func test() {

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

    // 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)))
    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.search(with: searchBounds) as! [QuadTreeItem] {
      print("(\(item.point().x), \(item.point().y))");
    }
  }
}
      

Objective-C

@import GoogleMapsUtils;

@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;
}

/// Function demonstrating how to create and use a quadtree
- (void)test {
  // 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);
  }
}

@end