طبقات البلاط

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

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

مقدمة

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

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

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

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

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

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

يكون كل مربع خريطة بحجم 256×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;
      

شاشات عالية النقاط في البوصة للأجهزة المزوّدة بشاشة Reتينا

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

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

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

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

Swift

layer.clearTileCache()
      

Objective-C

[layer clearTileCache];