طبقات البلاط

تنظيم صفحاتك في مجموعات يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.
اختيار نظام أساسي: Android iOS JavaScript

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

المقدمة

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

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

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

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

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

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

مربع كل مربع هو مربع 256x256. في مستوى التكبير/التصغير 0، يتم عرض العالم بأسره في مربع واحد. يزيد كل مستوى تكبير من التكبير بمقدار عاملين. ولذلك، عند مستوى التكبير 1، سيتم عرض الخريطة كشبكة من 2x2 من المربعات، أو شبكة 4x4 في مستوى التكبير/التصغير 2، وشبكة 8x8 في مستوى التكبير/التصغير 3، وهكذا. إذا كنت تنشئ صورًا لطبقة تجانب، فسيتعين عليك إنشاء صورة جديدة بحجم 256x256 لكل مربع في كل مستوى تكبير ترغب في دعمه.

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

  1. إنشاء كائن GMSURLTileLayer أو فئة فرعية مخصصة من GMSTileLayer/GMSSyncTileLayer.
  2. يمكنك اختياريًا تعديل الخاصية zIndex لضبط موضعها بالنسبة إلى طبقات المربّعات الأخرى.
  3. حدِّد العنصر GMSTileLayer على الخريطة من خلال ضبط السمة map.

توفر حزمة SDK للخرائط لنظام التشغيل iOS ثلاث فئات يمكن استخدامها لتنفيذ طبقة تجانب. مع كل فئة، ستحتاج إلى تحديد كيفية جلب مربع الخريطة الصحيح لمجموعة معينة من إحداثيات {x,y,zoom}. والخيارات المتاحة هي:

  • فئة فرعية GMSSyncTileLayer، تقدّم تنفيذ tileForX:y:zoom التي تعرض UIImage مثيلات.
  • فئة فرعية GMSTileLayer، يتم من خلالها تنفيذ الطريقة غير المتزامنة requestTileForX:y:zoom التي تستدعي لاحقًا صورة مربّعة.
  • استخدِم الصف الحالي، GMSURLTileLayer، لجلب المربّعات تلقائيًا من عناوين URL، ما يوفّر الحظر GMSTileURLConstructor. GMSURLTileLayer هي فئة ملموسة لا يمكن تصنيفها فرعيًا.

في حالة الفئة الفرعية GMSSyncTileLayer أو GMSTileLayer، سيؤدي تقديم نتيجة مربّع nil إلى إعلام حزمة تطوير البرامج (SDK) للخرائط لنظام التشغيل 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

يمكنك استخدام صور عالية لكل بوصة (DPI) مع GMSSyncTileLayer أو GMSURLTileLayer من خلال ضبط tileSize على 512. تشير السمة tileSize إلى عدد وحدات البكسل التي تفضل صور المربعات التي يتم عرضها الظهور على أنها 256 بكسل تلقائيًا؛ وهي بُعد مربّع "خرائط Google" على جهاز بخلاف جهاز Retina.

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

إزالة البلاط القديم

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

Swift

layer.clearTileCache()
      

Objective-C

[layer clearTileCache];