שכבות אריחים

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

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

מבוא

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

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

קואורדינטות של משבצות

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

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

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

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

הוספת שכבת משבצות

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

ב-SDK של מפות Google ל-iOS יש שלוש מחלקות שבהן אפשר להשתמש כדי להטמיע שכבת משבצות. בכל מחלקה תצטרכו להגדיר איך לאחזר את אריח המפה המתאים לקבוצת קואורדינטות {x,y,zoom} נתונה. האפשרויות הזמינות הן:

  • מחלקה משנית GMSSyncTileLayer, מספקת הטמעה של tileForX:y:zoom שמחזירה UIImage מכונות.
  • מחלקת המשנה GMSTileLayer, שכוללת את ההטמעה של השיטה האסינכרונית requestTileForX:y:zoom שחוזרת מאוחר יותר באמצעות תמונת משבצת.
  • משתמשים במחלקה הקיימת, GMSURLTileLayer, כדי לאחזר באופן אוטומטי משבצות מכתובות URL עם הבלוק GMSTileURLConstructor. GMSURLTileLayer היא מחלקה קונקרטית שאי אפשר לתת מחלקה משנית.

במקרה של סיווג משנה GMSSyncTileLayer או GMSTileLayer, אם תספקו את תוצאת המשבצת nil, ה-SDK של מפות Google ל-iOS יוכל להודיע ל-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 במכשיר שאינו Retina.

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

הסרת אריחים לא פעילים

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

Swift

layer.clearTileCache()
      

Objective-C

[layer clearTileCache];