কোয়াডট্রি

এই পৃষ্ঠাটি কোয়াডট্রি ইউটিলিটি বর্ণনা করে যা iOS এর জন্য Maps SDK-এর জন্য ইউটিলিটি লাইব্রেরিতে উপলব্ধ।

একটি কোয়াডট্রি হল একটি ডেটা স্ট্রাকচার যা আগ্রহের বিন্দুর আশেপাশের একটি এলাকার ভিতরে অনুসন্ধান করে একটি একক বিন্দুর কাছাকাছি পয়েন্টগুলি খুঁজে পেতে কার্যকর।

একটি quadtree ব্যবহার করে, আপনি একটি 2D সীমার মধ্যে পয়েন্টগুলির জন্য দক্ষতার সাথে অনুসন্ধান করতে পারেন, যেখানে সেই বিন্দুগুলিকে lat/lng স্থানাঙ্ক বা কার্টেসিয়ান (x, y) স্থানাঙ্ক হিসাবে সংজ্ঞায়িত করা হয়। কোয়াডট্রি নোডগুলিতে স্থানাঙ্কের বালতি সঞ্চয় করে এবং অঞ্চল অনুসারে তাদের সূচী করে (বাউন্ডিং বক্স)। একটি প্রদত্ত স্থানাঙ্ক জোড়া খুঁজে পেতে, আপনি quadtree এর নোডের মধ্য দিয়ে যান।

পূর্বশর্ত এবং নোট

কোয়াডট্রি ইউটিলিটি আইওএস ইউটিলিটি লাইব্রেরির জন্য মানচিত্র SDK- এর অংশ। আপনি যদি এখনও লাইব্রেরি সেট আপ না করে থাকেন, তাহলে এই পৃষ্ঠার বাকি অংশ পড়ার আগে সেটআপ গাইড অনুসরণ করুন।

একটি quadtree যোগ করা এবং একটি নির্দিষ্ট এলাকায় পয়েন্ট জন্য অনুসন্ধান

নিম্নলিখিত কোডটি একটি চতুর্গাছ তৈরি করে, তারপর একটি প্রদত্ত এলাকার মধ্যে সমস্ত পয়েন্ট অনুসন্ধান করে:

সুইফট

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))");
    }
  }
}
      

উদ্দেশ্য গ

@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