يمكنك إضافة الصور أعلى الخريطة كطبقة متجانبة. يتم وضع طبقات البلاط فوق مربع الخريطة عند مستوى تكبير معين. مع وجود مربعات كافية، يمكنك استكمال بيانات خريطة Google للخريطة بأكملها، بمستويات تكبير/تصغير متعددة.
مقدمة
تسمح لك طبقات البلاط (التي يشار إليها أحيانًا باسم "تراكبات التجانب") بتركيب الصور أعلى مربعات الخرائط الأساسية من Google. وهذه طريقة ممتازة لإضافة بيانات
- مثل نقاط الاهتمام أو معلومات حركة المرور - والصور المحلية إلى
تطبيقك. وعند دمجها مع نوع الخريطة kGMSTypeNone
،
تتيح لك طبقات المربّعات بشكلٍ فعّال استبدال بيانات الخريطة الأساسية لـ Google ببياناتك الخاصة.
تكون طبقات البلاط مفيدة عندما ترغب في إضافة صور واسعة، تغطي عادة مناطق جغرافية كبيرة، إلى الخريطة. وعلى النقيض، تكون تراكبات الأرض مفيدة عندما ترغب في إصلاح صورة واحدة في نقطة واحدة على الخريطة.
إحداثيات البلاط
تقوم واجهة برمجة تطبيقات الخرائط بتقسيم الصور عند كل مستوى تكبير إلى مجموعة من مربعات الخرائط المربعة، والتي يتم ترتيبها في شبكة مرتبة. عندما يتم تمرير الخريطة إلى موقع جديد، أو إلى مستوى تكبير/تصغير جديد، تحدد واجهة برمجة تطبيقات الخرائط الفئات المطلوبة، وتحوّلها إلى مجموعة من المربّعات لاستردادها.
لتنفيذ Google لإسقاط ماركاتور، يكون المربّع الذي يحتوي على الإحداثيات (0,0) دائمًا في الزاوية الشمالية الغربية للخريطة، مع زيادة قيم x
من الغرب إلى الشرق وقيم y
من الشمال إلى الجنوب.
تتم فهرسة الفئات باستخدام إحداثيات x,y
من ذلك المصدر. على سبيل المثال، في مستوى التكبير أو التصغير 2، عند تقسيم الأرض إلى 16 مربّعًا، يمكن الإشارة إلى كل مربّع من خلال زوج x,y
فريد:
كل مربع خريطة هو مربع نقطة 256x256. عند مستوى التكبير/التصغير 0، يتم عرض العالم بالكامل في مربّع واحد. كل مستوى من مستويات التكبير يزيد من التكبير بعامل اثنين. لذلك، في مستوى التكبير/التصغير 1، سيتم عرض الخريطة كشبكة من مربّعات 2×2، أو شبكة 4×4 في مستوى التكبير/التصغير 2، وشبكة 8×8 في مستوى التكبير/التصغير 3، وهكذا. إذا كنت تقوم بإنشاء صور لطبقة تجانب، فستحتاج إلى إنشاء صورة نقطة جديدة بحجم 256×256 لكل مربع في كل مستوى تكبير تريد دعمه.
إضافة طبقة تجانب
- إنشاء نسخة افتراضية لكائن
GMSURLTileLayer
أو فئة فرعية مخصّصة منGMSTileLayer
/GMSSyncTileLayer
. - يمكنك اختياريًا تعديل السمة
zIndex
لضبط موضعها بالنسبة إلى طبقات المربّعات الأخرى. - يمكنك تحديد العنصر
GMSTileLayer
على الخريطة من خلال ضبط السمةmap
الخاصة به.
توفر حزمة تطوير البرامج بالاستناد إلى بيانات "خرائط Google" لنظام التشغيل iOS ثلاث فئات يمكن استخدامها لتنفيذ طبقة تجانب. في كل فئة، ستحتاج إلى تحديد كيفية استرجاع
مربّع الخريطة الصحيح لمجموعة معيّنة من إحداثيات {x,y,zoom}
. وفي ما يلي الخيارات المتاحة:
- الفئة الفرعية
GMSSyncTileLayer
، التي توفر تنفيذtileForX:y:zoom
التي تعرضUIImage
مثيلات. - الفئة الفرعية
GMSTileLayer
، التي توفِّر تنفيذ الطريقة غير المتزامنةrequestTileForX:y:zoom
التي تستدعي لاحقًا صورة متجانبة. - استخدِم الفئة الحالية،
GMSURLTileLayer
، لجلب المربّعات تلقائيًا من عناوين URL، ما يوفّر حظرGMSTileURLConstructor
.GMSURLTileLayer
هي فئة ملموسة لا يمكن تصنيفها فرعيًا.
في حال استخدام التصنيف الفرعي GMSSyncTileLayer
أو GMSTileLayer
، سيؤدي تقديم نتيجة مربّعة nil
إلى إعلام حزمة تطوير البرامج (SDK) بخرائط Google لنظام التشغيل iOS بأنّ البيانات غير متاحة حاليًا، ولكنّها قد تكون متاحة في المستقبل. بدلاً من ذلك، يمكنك عرض
kGMSTileLayerNoTile
للإشارة إلى عدم توفّر مربّع في هذا
الموقع.
بالنسبة إلى GMSURLTileLayer
، سيشير عرض رمز الاستجابة nil
من GMSTileURLConstructor
إلى عدم توفّر مربّع في هذا الموقع.
استخدام "GMSURLTileLayer" لاسترجاع المربّعات من عناوين URL
لا تتطلّب السمة GMSURLTileLayer
فئات فرعية، ولكن عليك تنفيذ حظر GMSTileURLConstructor
. يوضح الرمز أدناه كيفية استخدام
GMSURLTileLayer
لعرض مخطط الطابق لمبنى متعدد الطوابق.
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; // Create the GMSTileLayer GMSURLTileLayer *layer = [GMSURLTileLayer tileLayerWithURLConstructor:^NSURL * _Nullable(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]; }]; // Display on the map at a specific zIndex layer.zIndex = 100; layer.map = mapView;
الفئة الفرعية GMSSyncTileLayer
لعرض المربّعات كـ UIImage
GMSSyncTileLayer
وGMSTileLayer
هي فئتان مجرّدتان صُممت لفئة فرعية. يمكنك استخدام هذه الصفوف لعرض مربّعات "UIImage
". يوضِّح المثال أدناه كيفية عرض صورة مخصّصة فوق بعض المربّعات على الخريطة من خلال التصنيف الفرعي 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 == 1) { 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 == 1) { return [UIImage imageNamed:@"australia"]; } else { return kGMSTileLayerNoTile; } } @end
لإضافة الطبقة إلى خريطتك، أنشئ مثيلاً للكائن وعيِّن خاصية الخريطة الخاصة به.
Swift
let layer = TestTileLayer() layer.map = mapView
Objective-C
GMSTileLayer *layer = [[TestTileLayer alloc] init]; layer.map = mapView;
مربّعات عالية عدد النقاط لكل بوصة (DPI) لأجهزة Retina
يمكنك استخدام صور عالية النقاط لكل بوصة مع GMSSyncTileLayer
أو GMSURLTileLayer
من خلال ضبط tileSize
على 512.
تشير السمة tileSize
إلى عدد وحدات البكسل التي تفضل صور التجانب التي تم عرضها، علمًا بأن الإعداد التلقائي هو 256، وهو بُعد مربع خرائط Google على جهاز غير تابع لـ Retina.
إذا كنت تعرض مربّعات عادية لعدد النقاط لكل بوصة على جهاز عدد النقاط لكل بوصة (DPI)، يمكنك تغيير حجم الصور من خلال ضبط tileSize
على 512. يُرجى العِلم أنّ تكبير حجم الصور قد يؤدي إلى تقليل
جودة الصورة، خاصةً للخطوط الرقيقة أو النصوص. للحصول على أفضل النتائج، يجب مطابقة
tileSize
وعدد النقاط لكل بوصة (DPI) في الصورة مع الشاشة. ستظهر الخرائط المعروضة على جهاز Retina بأفضل شكل ممكن عند عرض صور عالية النقاط لكل بوصة (DPI) بمقدار tileSize
من 512، في حين أنّ الخرائط المعروضة على جهاز غير تابع لشبكات Retina ستبدو رائعة مع الصور العادية،
والقيمة التلقائية التي تبلغ tileSize
من 256.
جارٍ محو المربّعات القديمة
إذا أصبحت الفئات المقدَّمة من الطبقة "قديمة"، يجب استدعاء الطريقة
clearTileCache
على الطبقة لفرض إعادة التحميل. سيؤدي هذا إلى إعادة تحميل
جميع المربعات في هذه الطبقة.
Swift
layer.clearTileCache()
Objective-C
[layer clearTileCache];