طبقات البلاط

اختيار النظام الأساسي: نظام التشغيل 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، وهكذا. إذا كنت تقوم بإنشاء صور لطبقة مربع، فستحتاج إلى إنشاء طبقة مربع صورة نقطة مقاس 256x256 لكل مربّع في كل مستوى تكبير/تصغير تريد توفيره.

إضافة طبقة البلاط

  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;
      

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

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

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

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

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

Swift

layer.clearTileCache()
      

Objective-C

[layer clearTileCache];