يمكنك إضافة صور أعلى خريطتك كطبقة تجانب. يتم وضع طبقات البلاط فوق مربع خريطة بمستوى تكبير معين. مع وجود مربعات كافية، يمكنك تكملة بيانات خريطة 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 لكل مربع في كل مستوى تكبير/ تصغير تريد دعمه.
إضافة طبقة تجانب
- إنشاء مثيل لكائن
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
إلى إعلام "حزمة تطوير البرامج بالاستناد إلى البيانات" لـ "خرائط 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];