בסקירה הכללית הזו מוסבר איך להגדיר מפה שנוספה לאפליקציה ל-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
. הדוגמה הבאה מציגה איך שכבת התנועה עשויה להופיע במפה.
נגישות
כברירת מחדל, רכיבי הנגישות במפה מוסתרים. כדי להפעיל
נגישות, מגדירים את מאפיין 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;