طبقات البلاط

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

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

مقدمة

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

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

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

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

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

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

كل مربّع خريطة هو مربّع بحجم 256×256 نقطة. عند مستوى التكبير 0، يتم عرض العالم بأكمله في مربّع واحد. يزيد كل مستوى تكبير من التكبير بمقدار عامل اثنين. على سبيل المثال، في مستوى التكبير 1، يتم عرض الخريطة كشبكة من المربّعات بحجم 2×2، وفي مستوى التكبير 2 كشبكة بحجم 4×4، وفي مستوى التكبير 3 كشبكة بحجم 8×8. لإنشاء صور لطبقة مربّعات، أنشئ صورة بحجم 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 إلى إعلام حزمة تطوير البرامج بالاستناد إلى بيانات "خرائط 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;
      

مربّعات عالية الدقة لأجهزة Retina

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

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

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

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

Swift

layer.clearTileCache()
      

Objective-C

[layer clearTileCache];