שכבות אריחים

בחירת פלטפורמה: Android iOS JavaScript

אפשר להוסיף תמונות מעל המפה כשכבת משבצות. שכבות משבצות ממוקמות מעל משבצת מפה ברמת זום ספציפית. אם תוסיפו מספיק משבצות, תוכלו להשלים את נתוני המפה של Google לכל המפה, במספר רמות זום.

מבוא

שכבות משבצות (שנקראות לפעמים שכבות-על של משבצות) מאפשרות להציג תמונות מעל משבצות המפה הבסיסית של Google. זוהי דרך מצוינת להוסיף לאפליקציה נתונים – כמו נקודות עניין או מידע על תנועה – ותמונות מקומיות. בשילוב עם סוג המפה kGMSTypeNone, שכבות המשבצות מאפשרות לכם להחליף את נתוני המפה הבסיסית של Google בנתונים משלכם.

שכבות של משבצות שימושיות כשרוצים להוסיף למפה תמונות נרחבות, בדרך כלל שמכסות אזורים גיאוגרפיים גדולים. לעומת זאת, שכבות-על של שטח שימושיות כשרוצים להציב תמונה אחת בנקודה אחת במפה.

קואורדינטות של קטע במפה

ב-Maps API, התמונות מחולקות בכל רמת זום לקבוצה של משבצות מרובעות במפה, שמאורגנות ברשת מסודרת. כשגוללים במפה למיקום חדש או לרמת זום חדשה, המערכת של Maps API קובעת אילו משבצות נדרשות וממירה אותן לקבוצת משבצות לאחזור.

בהטמעה של Google של הקרנת Mercator, המשבצת עם הקואורדינטות (0,0) תמיד נמצאת בפינה הצפון-מערבית של המפה, כאשר ערכי x גדלים ממערב למזרח וערכי y גדלים מצפון לדרום. המשבצות נוספות לאינדקס באמצעות קואורדינטות x,y מהמקור הזה. לדוגמה, ברמת הזום 2, כשהעולם מחולק ל-16 משבצות, אפשר להפנות לכל משבצת באמצעות זוג x,y ייחודי:

מפה של העולם שמחולקת לארבע שורות ולארבע עמודות של משבצות.

כל משבצת במפה היא ריבוע של 256x256 נקודות. ברמת הזום 0, כל העולם מעובד באריח אחד. בכל רמת זום, ההגדלה גדלה פי שניים. לכן, ברמת זום 1 המפה תוצג בתצוגת רשת של 2x2 משבצות, ברמת זום 2 בתצוגת רשת של 4x4 משבצות, ברמת זום 3 בתצוגת רשת של 8x8 משבצות וכן הלאה. אם אתם יוצרים תמונות לשכבת משבצות, תצטרכו ליצור תמונה חדשה של 256x256 נקודות לכל משבצת בכל רמת זום שתרצו לתמוך בה.

הוספת שכבת כרטיסי מידע

  1. יוצרים אובייקט GMSURLTileLayer או תת-סוג בהתאמה אישית של GMSTileLayer או GMSSyncTileLayer.
  2. אפשר לשנות את המאפיין zIndex כדי לשנות את המיקום שלו ביחס לשכבות אחרות של משבצות.
  3. כדי להקצות את האובייקט GMSTileLayer למפה, מגדירים את המאפיין map שלו.

ב-SDK של מפות ל-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) למכשירי Retina

אפשר להשתמש בתמונות עם רזולוציית DPI גבוהה ב-GMSSyncTileLayer או ב-GMSURLTileLayer על ידי הגדרת tileSize לערך 512. המאפיין tileSize מציין את מספר הפיקסלים שבו עדיף להציג את התמונות של המשבצות שהוחזרו. ברירת המחדל היא 256 – המאפיין של משבצת במפות Google במכשיר שאינו Retina.

אם אתם מציגים משבצות DPI רגילות במכשיר עם DPI גבוה, תוכלו להגדיל את התמונות על ידי הגדרת הערך tileSize ל-512. חשוב לזכור ששינוי רזולוציית התמונה לגדולה יותר עלול לגרום לירידה באיכות התמונה, במיוחד אם מדובר בקווים דקים או בטקסט. כדי לקבל את התוצאות הטובות ביותר, כדאי להתאים את הערך של tileSize ואת רזולוציית המדפסת של התמונה למסך. מפות Google שמוצגות במכשיר עם מסך Retina ייראו במיטבן כשמוצגות בהן תמונות ברזולוציה גבוהה עם tileSize של 512. לעומת זאת, מפות Google שמוצגות במכשיר שאינו עם מסך Retina ייראו מצוין עם תמונות רגילות ועם tileSize שמוגדר כברירת מחדל (256).

ניקוי אריחים לא עדכניים

אם המשבצות שסופקו על ידי השכבה הופכות ל 'לא עדכניות', צריך להפעיל את השיטה clearTileCache בשכבה כדי לאלץ רענון. הפעולה הזו תגרום לטעינה מחדש של כל המשבצות בשכבה הזו.

Swift

layer.clearTileCache()
      

Objective-C

[layer clearTileCache];