הגדרת מפה

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

בסקירה הכללית הזו מוסבר איך להגדיר מפה שנוספה לאפליקציה ל-iOS באמצעות ה-SDK של מפות ל-iOS.

סקירה כללית

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

ההגדרות הראשוניות של המפה כוללות את ההגדרות הבאות:

בזמן ריצה, ניתן לקבוע את ההגדרות האלה והגדרות הוספה מסוימות על ידי עדכון האובייקט GMSMapView.

אפשרויות במפה

כשמאתחלים את תצוגת המפה, אפשרויות התצורה מוגדרות באמצעות GMSMapViewOptions. מאפייני האפשרויות כוללים את frame, camera, mapID או backgroundColor.

אפשרויות מפה
מסגרת
ערך: CGRect
מסגרת המפה. ברירת המחדל היא CGRectZero.
מצלמה
ערך: GMSCameraPosition
מיקום ברירת המחדל של המצלמה במפה.
mapID
ערך: GMSMapID
מזהה המפה של Google. פרמטר אופציונלי.
backgroundColor
ערך: UIColor
ברירת המחדל היא UIColor.lightGray

הגדרת אפשרויות המפה

אפשר להגדיר מאפייני אפשרות משלכם או להעביר אובייקט GMSMapViewOptions עם ערכי ברירת מחדל ישירות אל GMSMapView.

Swift

let options = GMSMapViewOptions()
options.camera = GMSCameraPosition.camera(withLatitude: -33.8683, longitude: 151.2086, zoom: 6)
let mapView = GMSMapView(options:options)

Objective-C

GMSMapViewOptions *options = [[GMSMapViewOptions alloc] init];
options.camera = [GMSCameraPosition cameraWithLatitude:-33.8683
                                                        longitude:151.2086
                                                             zoom:6];
GMSMapView *mapView = [[GMSMapView alloc] initWithOptions:options];

דוגמה להעברת אובייקט GMSMapViewOptions עם ערכי ברירת מחדל ישירות אל GMSMapView.

Swift

let options = GMSMapViewOptions()
let mapView = GMSMapView(options:options) //initialized with default values

Objective-C

GMSMapViewOptions *options = [[GMSMapViewOptions alloc] init];
GMSMapView *mapView = [[GMSMapView alloc] initWithOptions:options]; //initialized with default values

הגדרת צבע הרקע

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

Swift

let options = GMSMapViewOptions()
options.backgroundColor = UIColor.yellowColor
let mapView = GMSMapView(options:options)

Objective-C

GMSMapViewOptions *options = [[GMSMapViewOptions alloc] init];
options.backgroundColor = UIColor.yellowColor;
GMSMapView *mapView = [[GMSMapView alloc] initWithOptions:options];

סוגי מפות

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

סוג המפה
רגיל
ערך: kGMSTypeNormal
מפת כבישים אופיינית. כאן מוצגים כבישים, חלק מהתכונות שנבנו על ידי בני אדם ותכונות טבע חשובות כמו נהרות. ניתן לראות גם תוויות של דרכים ושל ישויות.
משולב
ערך: kGMSTypeHybrid
נתוני צילומי לוויין עם מפות כבישים. ניתן לראות גם את תוויות הכבישים והישויות.
לוויין
ערך: kGMSTypeSatellite
נתוני צילום לוויין. לא ניתן לראות את התוויות של הכביש ושל התכונות.
פני השטח
ערך: kGMSTypeTerrain
נתונים טופוגרפיים המפה כוללת צבעים, קווי מתאר ותוויות וכן הצללה בנקודות מבט. אפשר לראות גם חלק מהכבישים והתוויות.
אין
ערך: kGMSTypeNone
אין אריחי מפה. אריחי המפה הבסיסית לא יוצגו. כדאי להשתמש במצב הזה בשילוב עם שכבות אריחים. הצגת נתוני התנועה מושבתת כאשר סוג המפה מוגדר כ'ללא'.

שינוי סוג המפה

כדי להגדיר את סוג המפה, צריך להקצות ערך חדש למאפיין GMSMapView.mapType. לדוגמה, כדי להציג סוג מפת לוויין:

Swift

let options = GMSMapViewOptions()
options.camera = GMSCameraPosition.camera(withLatitude: -33.8683, longitude: 151.2086, zoom: 6)
let mapView = GMSMapView(options:options)
mapView.mapType = .satellite

Objective-C

GMSMapViewOptions *options = [[GMSMapViewOptions alloc] init];
options.camera = [GMSCameraPosition cameraWithLatitude:-33.8683
                                                  longitude:151.2086
                                                        zoom:6];
GMSMapView *mapView = [[GMSMapView alloc] initWithOptions:options];
mapView.mapType = kGMSTypeSatellite;

הכלי הבא מציג השוואה בין מפות של פני השטח, מפות רגילות ומפות היברידיות באותו מיקום:

מפות פנים

כשמגדילים את התצוגה, ה-SDK של מפות Google ל-iOS יציג תוכניות קומה של אזורים פנימיים כמו שדות תעופה, קניונים, חנויות קמעונאיות גדולות ותחנות תחבורה ציבורית. תוכניות קומה של מבנים משולבות במשבצות המפה המוגדרות כברירת מחדל עבור סוג המפה 'הרגיל' (kGMSTypeNormal), והן מופעלות באופן אוטומטי כשהמשתמש מגדילים את התצוגה, והן נעלמות כשהמפה מקטינה את התצוגה.

אפשר להשבית את מפות הפנים על ידי הגדרת המאפיין indoorEnabled של GMSMapView ל-NO.

Swift

mapView.isIndoorEnabled = false
      

Objective-C

mapView.indoorEnabled = NO;
      

לחלופין, אפשר להשבית רק את הפקד של בורר הקומות.

הוספת תוכניות קומה

תוכניות קומה זמינות במיקומים נבחרים. אם אין נתונים זמינים של תוכנית קומה לבניין שאתם רוצים להדגיש באפליקציה, תוכלו:

  • הוספת תוכניות קומה ישירות למפות Google. כך התוכניות שלכם זמינות לכל המשתמשים במפות Google.
  • הצגת תוכנית קומה כשכבת-על של קרקע. כך רק משתמשי האפליקציה יכולים לראות את תוכניות הקומה.

שכבת התנועה

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

מפת Google שמציגה את שכבת התנועה

נגישות

כברירת מחדל, רכיבי הנגישות במפה מוסתרים. כדי להפעיל נגישות, מגדירים את מאפיין accessibilityElementsHidden של GMSMapView ל-NO. זה גורם ליצירה של רכיבי נגישות לאובייקטים בשכבת-על (כמו GMSMarker וחלונות מידע, GMSPolyline וכו').

Swift

mapView.accessibilityElementsHidden = false
      

Objective-C

mapView.accessibilityElementsHidden = NO;
      

הנכס הזה תואם לפרוטוקול UIAccessibility הלא רשמי, אבל ערך ברירת המחדל ב-SDK של מפות Google ל-iOS הוא YES.

המיקום שלי

כברירת מחדל, נתוני המיקום לא מוצגים במפה. תוכל להפעיל את הנקודה הכחולה 'המיקום שלי' ואת כיוון המצפן על ידי הגדרת myLocationEnabled ב-GMSMapView.

Swift

mapView.isMyLocationEnabled = true
      

Objective-C

mapView.myLocationEnabled = YES;
      

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

Swift

print("User's location: \(String(describing: mapView.myLocation))")
      

Objective-C

NSLog(@"User's location: %@", mapView.myLocation);
      

בניינים בתלת ממד

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

מפה תלת-ממדית של בניינים בסיאטל, וושינגטון.

אפשר להשבית את המבנים התלת-ממדיים על ידי הגדרת נכס GMSMapView המתאים ב-Swift או ב-Objective-C, באופן הבא:

Swift

mapView.isBuildingsEnabled = false
      

Objective-C

[mapView setBuildingsEnabled:NO];
      

מרווח פנימי במפה

מפת Google תוכננה למלא את כל האזור שהוגדר על ידי GMSMapView. כמה היבטים של המראה וההתנהגות של המפה מוגדרים בהתאם למאפייני התצוגה:

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

אפשר להוסיף מרווח פנימי מסביב לקצוות המפה באמצעות GMSMapView.padding. המפה ממשיכה למלא את כל הקונטיינר, אבל המיקום של הטקסט והפקדים, התנועות במפה ותנועות המצלמה פועלים כאילו הם מוקמו בשטח קטן יותר. כתוצאה מכך:

  • תנועות המצלמה באמצעות קריאות ל-API או לחיצות לחצנים (למשל, מצפן, המיקום שלי) הן יחסיות לאזור המרופד.
  • GMSMapView.projection מחזירה היטל שכולל רק את האזור המרווח.
  • הפקדים של ממשק המשתמש מקוזזים מקצה הקונטיינר בהתאם למספר הנקודות שצוין.

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

מרווח פנימי במפה

כדי להוסיף מרווח פנימי למפה, יוצרים אובייקט UIEdgeInsets ומעבירים אותו אל GMSMapView.נכס אחד (padding).

Swift

// Insets are specified in this order: top, left, bottom, right
let mapInsets = UIEdgeInsets(top: 100.0, left: 0.0, bottom: 0.0, right: 300.0)
mapView.padding = mapInsets
      

Objective-C

// Insets are specified in this order: top, left, bottom, right
UIEdgeInsets mapInsets = UIEdgeInsetsMake(100.0, 0.0, 0.0, 300.0);
mapView.padding = mapInsets;