توضّح هذه الصفحة الأداة رباعية الاستخدامات التي تتوفر في مكتبة الخدمات لحزمة تطوير البرامج (SDK) للخرائط لنظام التشغيل iOS.
كوادرري هي بنية بيانات تفيد في العثور على نقاط بالقرب من نقطة واحدة، من خلال البحث داخل منطقة تحيط بنقطة الاهتمام.
باستخدام رباعي التربيع، يمكنك البحث بكفاءة عن النقاط داخل نطاق ثنائي الأبعاد، حيث يتم تحديد هذه النقاط كإحداثيات خطوط الطول/العرض أو على هيئة إحداثيات ديمغرافية (س، ص). تخزّن المربّع رباعية مجموعات من الإحداثيات في العُقد، وتفهرسها حسب المنطقة (مربّع الربط). للعثور على زوج من الإحداثيات، يمكنك التنقّل بين عُقد الربع الرباعي.
المتطلبات الأساسية والملاحظات
أداة quadtree هي جزء من Maps SDK for iOS Utility Library (مكتبة أدوات خرائط iOS). إذا لم يتم إعداد المكتبة بعد، يُرجى اتّباع دليل الإعداد قبل قراءة بقية هذه الصفحة.
إضافة رباعية والبحث عن نقاط في منطقة معينة
ينشئ الرمز التالي رمزًا رباعيًا، ثم يبحث عن جميع النقاط داخل منطقة معيّنة:
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