שכבות אריחים

בחירת פלטפורמה: 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, או כמרשת של משבצות בגודל 4x4 ברמת התצוגה 2, כמרשת של משבצות בגודל 8x8 ברמת התצוגה 3 וכן הלאה. אם אתם יוצרים תמונות לשכבת משבצות, תצטרכו ליצור תמונה חדשה של 256x256 פיקסלים לכל משבצת בכל רמת זום שתרצו לתמוך בה.

הוספת שכבת אריחים

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

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

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

במקרה של יצירת תת-סוג של GMSSyncTileLayer או GMSTileLayer, הצגת תוצאת משבצת nil תודיע ל-Maps SDK ל-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 ייראו במיטבן כשהן מוצגות בתמונות עם DPI גבוה ועם הערך tileSize של 512. לעומת זאת, מפות Google שמוצגות במכשיר שאינו עם מסך Retina ייראו מצוין בתמונות רגילות ובערך ברירת המחדל של tileSize, שהוא 256.

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

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

Swift

layer.clearTileCache()
      

Objective-C

[layer clearTileCache];