طبقات البلاط

اختَر النظام الأساسي: Android iOS JavaScript

يمكنك إضافة الصور أعلى الخريطة كطبقة متجانبة. يتم وضع طبقات البلاط فوق مربع الخريطة عند مستوى تكبير معين. مع وجود مربعات كافية، يمكنك استكمال بيانات خريطة 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 لكل مربع في كل مستوى تكبير تريد دعمه.

إضافة طبقة تجانب

  1. إنشاء نسخة افتراضية لكائن GMSURLTileLayer أو فئة فرعية مخصّصة من GMSTileLayer/GMSSyncTileLayer.
  2. يمكنك اختياريًا تعديل السمة zIndex لضبط موضعها بالنسبة إلى طبقات المربّعات الأخرى.
  3. يمكنك تحديد العنصر 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];