طبقات البلاط

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

يمكنك إضافة صور على سطح خريطتك كطبقة وحدات. يتم وضع "طبقات المربّعات" فوق مربّع خريطة في مستوى تكبير/تصغير معيّن. باستخدام عدد كافٍ من المربّعات، يمكنك إضافة بيانات خريطة Google إلى الخريطة بأكملها، وذلك بمستويات تكبير متعددة.

مقدمة

تتيح لك طبقات المربّعات (المعروفة أحيانًا باسم "تراكبات المربّعات") superimpose الصور على مربّعات الخريطة الأساسية من Google. هذه طريقة رائعة لإضافة بيانات - مثل نقاط الاهتمام أو معلومات حركة المرور - والصور المحلية إلى تطبيقك. وعند دمجها مع نوع الخريطة kGMSTypeNone، تسمح لك ملفّات الأساس باستبدال بيانات الخريطة الأساسية من Google ببياناتك.

تكون طبقات المربّعات مفيدة عندما تريد إضافة صور واسعة النطاق، والتي تغطي عادةً مناطق جغرافية كبيرة، إلى الخريطة. في المقابل، تكون تداخلات سطح الأرض مفيدة عندما تريد تثبيت صورة واحدة في نقطة واحدة على الخريطة.

إحداثيات المربّعات

تقسم Maps API الصور في كل مستوى تكبير إلى مجموعة من وحدات مربعة تشكل الخريطة، ويتم ترتيبها في شبكة منظمة. عندما يتم الانتقال في الخريطة إلى موقع جغرافي جديد أو إلى مستوى تكبير/تصغير جديد، تحدِّد واجهة برمجة التطبيقات Maps API المربّعات التي تكون مطلوبة، وتحوِّلها إلى مجموعة من المربّعات التي يجب استرجاعها.

بالنسبة إلى طريقة Google في عرض الإسقاط Mercator، يكون المربّع الذي يحتوي على الإحداثيَين (0,0) دائمًا في الزاوية الشمالية الغربية من الخريطة، مع زيادة قيم x من الغرب إلى الشرق وزيادة قيم y من الشمال إلى الجنوب. تتم فهرسة شاشات المعلومات باستخدام إحداثيات x,y من هذا المصدر. على سبيل المثال، عند مستوى التكبير 2، عندما يتم تقسيم الأرض إلى 16 مربّعًا، يمكن الإشارة إلى كل مربّع باستخدام زوج x,y فريد:

خريطة للعالم مقسمة إلى أربعة صفوف وأربعة أعمدة من المربّعات

كل مربّع من مربّعات الخريطة هو مربّع بحجم 256 x ‏256 نقطة. عند مستوى التكبير 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.

إذا كنت تعرض مربّعات بدرجة كثافة بكسل عادية على جهاز بدرجة كثافة بكسل عالية، يمكنك تكبير الصور من خلال ضبط tileSize على 512. يُرجى العِلم أنّ تكبير الصور قد يؤدي إلى خفض جودتها، خاصةً بالنسبة إلى الخطوط الدقيقة أو النصوص. لتحقيق أفضل النتائج، يجب مطابقة tileSize وعدد نقاط الصورة في البوصة مع الشاشة. ستظهر الخرائط المعروضة على جهاز Retina بأفضل شكل عند عرض صور بدرجة كثافة عالية للنقاط مع tileSize‏512، بينما ستظهر الخرائط المعروضة على جهاز غير مزوّد بشاشة Retina بأفضل شكل عند عرض صور عادية وtileSize التلقائي الذي يبلغ 256.

محو المربّعات القديمة

إذا أصبحت الوحدات المربّعة التي تقدّمها الطبقة "قديمة"، يجب استدعاء الطريقة clearTileCache على الطبقة لفرض إعادة تحميل. سيؤدي ذلك إلى إعادة تحميل جميع المربّعات في هذه الطبقة.

Swift

layer.clearTileCache()
      

Objective-C

[layer clearTileCache];