يمكنك إضافة صور في أعلى الخريطة كطبقة معلومات. يتم وضع طبقات البلاط فوق سطح الخريطة على مستوى تكبير/تصغير محدد. باستخدام مربعات كافية، يمكنك تكملة بيانات خريطة Google للخريطة بأكملها، بمستويات تكبير/تصغير متعددة.
المقدمة
تسمح لك طبقات المربّعات (يُشار إليها أحيانًا باسم "تراكبات الصور") بتراكب
الصور فوق مربعات الخرائط الأساسية من Google. هذه طريقة ممتازة لإضافة البيانات، مثل معلومات نقاط الاهتمام أو حركة المرور والصور المحلية إلى تطبيقك. عند دمجها مع نوع الخريطة kGMSTypeNone
، تتيح لك طبقات المربّع بشكل فعّال استبدال بيانات الخريطة الأساسية من Google ببياناتك.
تكون طبقات المربّعات مفيدة عندما تريد إضافة صور شاملة، تغطي عادةً مناطق جغرافية كبيرة إلى الخريطة. في المقابل، تكون تراكبات الصور على الأرض مفيدة عندما تريد إصلاح صورة واحدة في نقطة واحدة على الخريطة.
إحداثيات البلاط
تُقسم واجهة برمجة تطبيقات الخرائط الصور عند كل مستوى تكبير إلى مجموعة من مربعات الخرائط المربّعة، والتي يتم ترتيبها في شبكة مرتَّبة. عند تمرير الخريطة إلى موقع جغرافي جديد، أو إلى مستوى تكبير/تصغير جديد، تحدِّد Maps API الأقسام المطلوبة، وستترجم ذلك إلى مجموعة من المربّعات لاستردادها.
لتنفيذ عرض إسقاط ميركاتور، يكون المربّع الذي يحتوي على تنسيق (0,0) دائمًا في الزاوية الشمالية الغربية من الخريطة، مع ارتفاع قيم x
من الغرب إلى الشرق وy
وزادت من الشمال إلى الجنوب.
تتم فهرسة الشاشات باستخدام إحداثيات x,y
من هذا المصدر. على سبيل المثال، على
مستوى التكبير 2، عند تقسيم الأرض إلى 16 جزءًا، يمكن الإشارة إلى كل جزء
من خلال زوج x,y
فريد:
كل مربع من الخريطة هو مربع 256x256 نقطة. عند مستوى التكبير أو التصغير 0، يتم عرض العالم بالكامل بمربّع واحد. وكل مستوى من مستويات التكبير أو التصغير يزيد من مستوى التكبير بمقدار عاملَين. لذا، عند مستوى التكبير 1، سيتم عرض الخريطة كشبكة 2×2 من المربعات، أو شبكة 4x4 على مستوى التكبير 2، أو شبكة 8x8 على مستوى التكبير 3، وهكذا. إذا كنت تنشئ صورًا لطبقة مقسّمة، ستحتاج إلى إنشاء صورة جديدة بحجم 256x256 نقطة لكل مربّع على كل مستوى تكبير تريد توفيره.
إضافة طبقة من البلاط
- يمكنك إنشاء مثيل
GMSURLTileLayer
أو إنشاء فئة فرعية مخصّصة منGMSTileLayer
/GMSSyncTileLayer
. - ويمكنك اختياريًا تعديل السمة
zIndex
لتعديل موضعها بالنسبة إلى طبقات المربّعات الأخرى. - حدِّد العنصر
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;
مربّعات DPI مرتفعة لأجهزة ريتينا
يمكنك استخدام صور مرتفعة لكل بوصة (DPI) مع GMSSyncTileLayer
أو GMSURLTileLayer
من خلال ضبط tileSize
على 512.
تشير السمة tileSize
إلى عدد وحدات البكسل التي تفضّل صور
المربّعات المعروضة ظهورها على النحو التالي، وهذا الإعداد التلقائي هو 256، وهو حجم
مربّع "خرائط Google" على جهاز لا يعمل بنظام الريتينا.
إذا كنت تعرض مربعات DPI العادية على جهاز High DPI (أعلى عدد من النقاط لكل بوصة)، يمكنك زيادة حجم الصور عن طريق ضبط tileSize
على 512. يُرجى ملاحظة أنّ تكبير الصور قد يؤدي إلى تقليل
جودة الصورة، خاصةً في الخطوط الدقيقة أو النص. للحصول على أفضل النتائج، يجب مطابقة
tileSize
و النقاط لكل بوصة (DPI) مع العرض على الشاشة. ستبدو الخرائط التي يتم عرضها على جهاز Retontes على أفضل نحو عند عرض صور DPI مرتفعة مع tileSize
من 512، في حين أن الخرائط المعروضة على جهاز غير ريتيني ستبدو رائعة مع الصور العادية وtileSize
التلقائي من 256.
جارٍ محو البلاط القديم
إذا أصبحت الأقسام التي تقدّمها الطبقة "قديمة"، يجب استدعاء الطريقة
clearTileCache
على الطبقة لفرض إعادة التحميل. سيؤدي ذلك إلى إعادة تحميل جميع الشاشات في هذه الطبقة.
Swift
layer.clearTileCache()
Objective-C
[layer clearTileCache];