طبقات البلاط

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

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

المقدمة

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

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

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

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

بالنسبة إلى تنفيذ 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 إلى إعلام "حزمة تطوير البرامج بالاستناد إلى البيانات" لـ "خرائط 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

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

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

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

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

Swift

layer.clearTileCache()
      

Objective-C

[layer clearTileCache];