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