
ערכת ה-SDK של מפות ל-iOS מאפשרת להוסיף צורות למפות בדרכים שונות. אלה הצורות שנתמכות:
- קו פוליגוני הוא סדרה של קטעי קו מחוברים שיכולים ליצור כל צורה שרוצים, ואפשר להשתמש בהם כדי לסמן נתיבים ומסלולים במפה.
- פוליגון הוא צורה סגורה שאפשר להשתמש בה כדי לסמן אזורים במפה.
- מעגל הוא היטל מדויק מבחינה גיאוגרפית של מעגל על פני כדור הארץ.
אתם יכולים לשנות את המראה של כל צורה בכמה דרכים.
קווים פוליגוניים
קווים פוליגוניים מאפשרים לשרטט קווים במפה. אובייקט GMSPolyline מייצג רצף מסודר של מיקומים, שמוצג כסדרה של קטעי קו. אפשר להגדיר את הצבע של קו פוליגוני באמצעות GMSStrokeStyle.
כדי ליצור קו פוליגוני, צריך לציין את הנתיב שלו על ידי יצירת אובייקט GMSMutablePath תואם עם שתי נקודות או יותר.
כל CLLocationCoordinate2D מייצג נקודה על פני כדור הארץ. מקטעי הקווים משורטטים בין הנקודות לפי הסדר שבו מוסיפים אותן למסלול. אפשר להוסיף נקודות למסלול באמצעות ה-methods addCoordinate: או addLatitude:longitude:.
Swift
let path = GMSMutablePath() path.add(CLLocationCoordinate2D(latitude: -33.85, longitude: 151.20)) path.add(CLLocationCoordinate2D(latitude: -33.70, longitude: 151.40)) path.add(CLLocationCoordinate2D(latitude: -33.73, longitude: 151.41)) let polyline = GMSPolyline(path: path)
Objective-C
GMSMutablePath *path = [GMSMutablePath path]; [path addCoordinate:CLLocationCoordinate2DMake(-33.85, 151.20)]; [path addCoordinate:CLLocationCoordinate2DMake(-33.70, 151.40)]; [path addCoordinate:CLLocationCoordinate2DMake(-33.73, 151.41)]; GMSPolyline *polyline = [GMSPolyline polylineWithPath:path];
הוספת קו פוליגוני
- יוצרים אובייקט
GMSMutablePath. - מגדירים את הנקודות בנתיב באמצעות השיטות
addCoordinate:אוaddLatitude:longitude:. - יוצרים אובייקט
GMSPolylineחדש באמצעות הנתיב כארגומנט. - מגדירים מאפיינים אחרים, כמו
strokeWidthו-strokeColor, לפי הצורך. - מגדירים את המאפיין
mapשלGMSPolyline. - הקו הפוליגוני מופיע במפה.
קטע הקוד הבא מוסיף מלבן למפה:
Swift
let rectanglePath = GMSMutablePath() rectanglePath.add(CLLocationCoordinate2D(latitude: 37.36, longitude: -122.0)) rectanglePath.add(CLLocationCoordinate2D(latitude: 37.45, longitude: -122.0)) rectanglePath.add(CLLocationCoordinate2D(latitude: 37.45, longitude: -122.2)) rectanglePath.add(CLLocationCoordinate2D(latitude: 37.36, longitude: -122.2)) rectanglePath.add(CLLocationCoordinate2D(latitude: 37.36, longitude: -122.0)) let rectangle = GMSPolyline(path: path) rectangle.map = mapView
Objective-C
GMSMutablePath *rectanglePath = [GMSMutablePath path]; [rectanglePath addCoordinate:CLLocationCoordinate2DMake(37.36, -122.0)]; [rectanglePath addCoordinate:CLLocationCoordinate2DMake(37.45, -122.0)]; [rectanglePath addCoordinate:CLLocationCoordinate2DMake(37.45, -122.2)]; [rectanglePath addCoordinate:CLLocationCoordinate2DMake(37.36, -122.2)]; [rectanglePath addCoordinate:CLLocationCoordinate2DMake(37.36, -122.0)]; GMSPolyline *rectangle = [GMSPolyline polylineWithPath:path]; rectangle.map = mapView;

הסרת קו פוליגוני
כדי להסיר קו פוליגוני מהמפה, מגדירים את המאפיין map של GMSPolyline ל-nil. לחלופין, אפשר להסיר את כל שכבות-העל (כולל קווים פוליגוניים וצורות אחרות) במפה על ידי קריאה ל-method GMSMapView
clear.
Swift
mapView.clear()
Objective-C
[mapView clear];
התאמה אישית של קו פוליגוני
האובייקט GMSPolyline מספק כמה מאפיינים שמאפשרים לשלוט במראה של הקו. הוא תומך באפשרויות הבאות:
strokeWidth- רוחב הקו כולו, בנקודות מסך. ברירת המחדל היא 1. הרוחב לא משתנה כשמשנים את מרחק התצוגה במפה.
geodesic-
כשהערך הוא
YES, הקצה של הקו הפוליגוני הזה מוצג כקו גיאודזי. קטעים גיאודזיים עוקבים אחרי המסלול הקצר ביותר לאורך פני השטח של כדור הארץ, ויכולים להופיע כקווים מעוקלים במפה עם היטל מרקטור. קטעים לא גיאודזיים משורטטים כקווים ישרים במפה. ברירת המחדל היאNO. spans- משמש לציון הצבע של קטע אחד או יותר בקו פוליגוני. המאפיין spans הוא מערך של אובייקטים מסוג
GMSStyleSpan. הגדרת המאפייןspansהיא הדרך המועדפת לשנות את הצבע של קו פוליגוני. strokeColor
- אובייקט
UIColorשמציין את הצבע של הקו הפוליגוני. ברירת המחדל היאblueColor. המערכת מתעלמת מהמאפייןstrokeColorאם המאפייןspansמוגדר.
קטע הקוד הבא מוסיף קו פוליגוני עבה ממלבורן לפרת', עם אינטרפולציה גיאודזית.
Swift
let path = GMSMutablePath() path.addLatitude(-37.81319, longitude: 144.96298) path.addLatitude(-31.95285, longitude: 115.85734) let polyline = GMSPolyline(path: path) polyline.strokeWidth = 10.0 polyline.geodesic = true polyline.map = mapView
Objective-C
GMSMutablePath *path = [GMSMutablePath path]; [path addLatitude:-37.81319 longitude:144.96298]; [path addLatitude:-31.95285 longitude:115.85734]; GMSPolyline *polyline = [GMSPolyline polylineWithPath:path]; polyline.strokeWidth = 10.f; polyline.geodesic = YES; polyline.map = mapView;
כדי לשנות קו פוליגוני אחרי שהוא נוסף למפה, חשוב לשמור את האובייקט GMSPolyline.
Swift
polyline.strokeColor = .blue
Objective-C
polyline.strokeColor = [UIColor blueColor];
שינוי הצבע של קו פוליגוני
קווים פוליגוניים משורטטים כסדרה של מקטעים במפה. אפשר לשנות את הצבע של מקטעים ספציפיים או של הקו כולו באמצעות המאפיין spans. המאפיין הזה מאפשר לכם לשלוט בצורה מפורטת בצבע של קו פוליגוני, אבל יש כמה דרכים נוחות להחיל סגנון אחד על כל הקו.
קטע הקוד הבא משתמש ב-method spanWithColor: כדי לשנות את הצבע של כל השורה לאדום.
Swift
polyline.spans = [GMSStyleSpan(color: .red)]
Objective-C
polyline.spans = @[[GMSStyleSpan spanWithColor:[UIColor redColor]]];
לחלופין, אם כבר יש לכם גישה לאובייקט GMSStrokeStyle, אתם יכולים להשתמש ב-method spanWithStyle:.
Swift
let solidRed = GMSStrokeStyle.solidColor(.red) polyline.spans = [GMSStyleSpan(style: solidRed)]
Objective-C
GMSStrokeStyle *solidRed = [GMSStrokeStyle solidColor:[UIColor redColor]]; polyline.spans = @[[GMSStyleSpan spanWithStyle:solidRed]];
בגרסאות של SDK של מפות ל-iOS שקדמו לגרסה 1.7, המאפיין היחיד strokeColor היה זמין להגדרת הצבע של כל ה-GMSPolyline. המאפיין spans מקבל עדיפות על פני strokeColor.
Swift
polyline.strokeColor = .red
Objective-C
polyline.strokeColor = [UIColor redColor];
סגנונות
אם האפליקציה שלכם מחילה את אותו צבע קו כמה פעמים, יכול להיות שיהיה לכם שימושי להגדיר סגנון שניתן לשימוש חוזר. סגנונות של קווים פוליגוניים מצוינים באמצעות האובייקט GMSStrokeStyle. סגנון קו יכול להיות בצבע אחיד או במעבר מצבע אחד לצבע אחר. אחרי שיוצרים סגנון, אפשר להחיל אותו על GMSStyleSpan באמצעות השיטה spanWithStyle:.
Swift
// Create two styles: one that is solid blue, and one that is a gradient from red to yellow let solidBlue = GMSStrokeStyle.solidColor(.blue) let solidBlueSpan = GMSStyleSpan(style: solidBlue) let redYellow = GMSStrokeStyle.gradient(from: .red, to: .yellow) let redYellowSpan = GMSStyleSpan(style: redYellow)
Objective-C
// Create two styles: one that is solid blue, and one that is a gradient from red to yellow GMSStrokeStyle *solidBlue = [GMSStrokeStyle solidColor:[UIColor blueColor]]; GMSStyleSpan *solidBlueSpan = [GMSStyleSpan spanWithStyle:solidBlue]; GMSStrokeStyle *redYellow = [GMSStrokeStyle gradientFromColor:[UIColor redColor] toColor:[UIColor yellowColor]]; GMSStyleSpan *redYellowSpan = [GMSStyleSpan spanWithStyle:redYellow];
הסגנון של span יימשך עד סוף הקו הפוליגוני, או עד שיוגדר סגנון חדש. אפשר לשנות את הצבע של כל הקו על ידי הגדרת המאפיין spans של קו פוליגוני לערך GMSStyleSpan יחיד. בדוגמה הזו מוסבר איך להחיל מעבר צבעים לאורך כל הקו הפוליגוני.
Swift
polyline.spans = [GMSStyleSpan(style: redYellow)]
Objective-C
polyline.spans = @[[GMSStyleSpan spanWithStyle:redYellow]];
שינוי הצבע של מקטעי קו ספציפיים
אם רוצים לעצב כל קטע של הקו הפוליגוני בנפרד, אפשר ליצור מערך של אובייקטים מסוג GMSStyleSpan ולהעביר אותו למאפיין spans. כברירת מחדל, כל פריט במערך מגדיר את הצבע של קטע הקו התואם. אם יש במערך יותר אלמנטים מאשר מקטעים בקו, המערכת תתעלם מהאלמנטים הנוספים. אם יש פחות רכיבים במערך, הערך האחרון של GMSStyleSpan מתאר את הצבע של שאר השורה.
אפשר להשתמש בגושי צבע או בקווים פוליגוניים עם מעבר צבעים כדי לציין שינויים לאורך הקו הפוליגוני, כמו גובה או מהירות. קטע הקוד הבא מגדיר את הצבע של שני המקטעים הראשונים של קו פוליגוני לאדום, ושאר הקו הוא מעבר הדרגתי מאדום לצהוב.
Swift
polyline.spans = [ GMSStyleSpan(style: solidRed), GMSStyleSpan(style: solidRed), GMSStyleSpan(style: redYellow) ]
Objective-C
polyline.spans = @[[GMSStyleSpan spanWithStyle:solidRed], [GMSStyleSpan spanWithStyle:solidRed], [GMSStyleSpan spanWithStyle:redYellow]];
אפשר להשתמש ב-spanWithStyle:segments: כדי להגדיר את הסגנון של כמה קטעים בבת אחת. לדוגמה, הקוד הבא שווה ערך לקוד שלמעלה.
אורך הקטע של ה-GMSStyleSpan האחרון תמיד נמחק, כי הסגנון משמש לתיאור שאר השורה.
Swift
polyline.spans = [ GMSStyleSpan(style: solidRed, segments:2), GMSStyleSpan(style: redYellow, segments:10) ]
Objective-C
polyline.spans = @[[GMSStyleSpan spanWithStyle:solidRed segments:2], [GMSStyleSpan spanWithStyle:redYellow segments:10]];
פלחים חלקיים
אפשר גם לציין פלחים כערך של שבר. הפעולה הזו תחיל את הסגנון על מספר חלקי של קטעים, ועלולה לגרום לפיצול של קטע בודד. כל GMSStyleSpan מתחיל מיד אחרי הקודם: בדוגמה הבאה, הצבע האפור מתחיל מחצי הדרך בקטע השני וממשיך עד חצי הדרך בקטע השלישי.
Swift
polyline.spans = [ GMSStyleSpan(style: solidRed, segments: 2.5), GMSStyleSpan(color: .gray), GMSStyleSpan(color: .purple, segments: 0.75), GMSStyleSpan(style: redYellow) ]
Objective-C
polyline.spans = @[[GMSStyleSpan spanWithStyle:solidRed segments:2.5], [GMSStyleSpan spanWithColor:[UIColor grayColor]], [GMSStyleSpan spanWithColor:[UIColor purpleColor] segments:0.75], [GMSStyleSpan spanWithStyle:redYellow]];
הוספת תבנית צבעים שחוזרת על עצמה לקו פוליגוני
כדי להוסיף תבנית לקו פוליגוני, אפשר להשתמש ב-method של כלי העזר GMSStyleSpans ב-GMSGeometryUtils. השיטה GMSStyleSpans מקבלת שני מערכים שמגדירים דפוס חוזר. מערך אחד מגדיר את הסגנונות שצריך לחזור עליהם, והמערך השני מגדיר את מרווח החזרה. אם משתמשים בהם ביחד, אפשר ליצור תבנית שאפשר להחיל על כל קו פוליגוני, בלי קשר לאורך שלו או למספר הקטעים הזמינים.
לדוגמה, קטע הקוד הבא מגדיר קו פוליגוני עם דפוס משתנה של שחור ולבן. האורכים שלו נחשבים כמטרים לאורך קו לוקסודרומי (בהיטל מרקטור, זהו קו ישר) כי הסוג מצוין כ-kGMSLengthRhumb.
Swift
let styles = [ GMSStrokeStyle.solidColor(.white), GMSStrokeStyle.solidColor(.black) ] let lengths: [NSNumber] = [100000, 50000] polyline.spans = GMSStyleSpans( polyline.path!, styles, lengths, GMSLengthKind.rhumb )
Objective-C
NSArray *styles = @[[GMSStrokeStyle solidColor:[UIColor whiteColor]], [GMSStrokeStyle solidColor:[UIColor blackColor]]]; NSArray *lengths = @[@100000, @50000]; polyline.spans = GMSStyleSpans(polyline.path, styles, lengths, kGMSLengthRhumb);
קווים פוליגוניים עם חותמת ספרייט
קווים פוליגוניים עם חותמת ספרייט מאפשרים לכם ליצור קו פוליגוני באמצעות תמונת מפת סיביות חוזרת לבחירתכם. צורות מוצגות עם קו מתאר ברור ברקע, אבל החותמת לא נחתכת בפינות של הקו, ולכן הן שימושיות במצבים כמו נקודות להמחשת מסלול הליכה.

כדי להשתמש בתכונה הזו, משתמשים ב-GMSSpriteStyle ומגדירים אותו כחותמת באמצעות המאפיין stampStyle של GMSStrokeStyle.
Swift
let path = GMSMutablePath() path.addLatitude(-37.81319, longitude: 144.96298) path.addLatitude(-31.95285, longitude: 115.85734) let polyline = GMSPolyline(path: path) polyline.strokeWidth = 20 let image = UIImage(named: "imageFromBundleOrAsset")! // Image could be from anywhere let stampStyle = GMSSpriteStyle(image: image) let transparentStampStroke = GMSStrokeStyle.transparentStroke(withStamp: stampStyle) let span = GMSStyleSpan(style: transparentStampStroke) polyline.spans = [span] polyline.map = mapView
Objective-C
GMSMutablePath *path = [GMSMutablePath path]; [path addLatitude:-37.81319 longitude:144.96298]; [path addLatitude:-31.95285 longitude:115.85734]; GMSPolyline *polyline = [GMSPolyline polylineWithPath:path]; polyline.strokeWidth = 20; UIImage *image = [UIImage imageNamed:@"imageFromBundleOrAsset"]; GMSStrokeStyle *transparentStampStroke = [GMSStrokeStyle transparentStrokeWithStampStyle:[GMSSpriteStyle spriteStyleWithImage:image]]; GMSStyleSpan *span = [GMSStyleSpan spanWithStyle:transparentStampStroke]; polyline.spans = @[span]; polyline.map = mapView;
קווים פוליגוניים עם טקסטורה מוטבעת
קווים פוליגוניים עם חותמת טקסטורה מאפשרים לכם ליצור קו פוליגוני באמצעות טקסטורה חוזרת לבחירתכם. אפשר להציג צורות עם קו מתאר ברור, בצבע אחיד או עם מעבר צבעים. הגודל של המרקם משתנה בהתאם לרמת הזום. תמונות בקצוות של נתיבים או נקודות בנתיבים נחתכות ברמות זום מסוימות.

כדי להשתמש בתכונה הזו, צריך להשתמש ב-GMSTextureStyle ולהגדיר אותו כחותמת באמצעות המאפיין stampStyle של GMSStrokeStyle.
Swift
let path = GMSMutablePath() path.addLatitude(-37.81319, longitude: 144.96298) path.addLatitude(-31.95285, longitude: 115.85734) let polyline = GMSPolyline(path: path) polyline.strokeWidth = 20 let redWithStamp = GMSStrokeStyle.solidColor(.red) let image = UIImage(named: "imageFromBundleOrAsset")! // Image could be from anywhere redWithStamp.stampStyle = GMSTextureStyle(image: image) let span = GMSStyleSpan(style: redWithStamp) polyline.spans = [span] polyline.map = mapView
Objective-C
GMSMutablePath *path = [GMSMutablePath path]; [path addLatitude:-37.81319 longitude:144.96298]; [path addLatitude:-31.95285 longitude:115.85734]; GMSPolyline *polyline = [GMSPolyline polylineWithPath:path]; polyline.strokeWidth = 20; GMSStrokeStyle *redWithStamp = [GMSStrokeStyle solidColor:[UIColor redColor]]; UIImage *image = [UIImage imageNamed:@"imageFromBundleOrAsset"]; // Image could be from anywhere redWithStamp.stampStyle = [GMSTextureStyle textureStyleWithImage:image]; GMSStyleSpan *span = [GMSStyleSpan spanWithStyle:redWithStamp]; polyline.spans = @[span]; polyline.map = mapView;
יכולות המפה
המאפיין mapCapabilities ב-GMSMapView מוסיף בדיקה פרוגרמטית של תכונות ספציפיות למפה. ההגדרה הזו שימושית כשרוצים לדעת אם capabilities מסוימים במפה זמינים לפני שקוראים לממשקי API ספציפיים. השאילתה הזו קובעת אם תצוגת המפה תומכת בקווים פוליגוניים עם חותמת ספרייט.
Swift
let path = GMSMutablePath() path.addLatitude(-37.81319, longitude: 144.96298) path.addLatitude(-31.95285, longitude: 115.85734) let polyline = GMSPolyline(path: path) polyline.strokeWidth = 20 let image = UIImage(named: "imageFromBundleOrAsset")! // Image could be from anywhere let spans: [GMSStyleSpan] if (mapView.mapCapabilities.contains(.spritePolylines)) { let spriteStyle = GMSSpriteStyle(image: image) let stroke = GMSStrokeStyle.transparentStroke(withStamp: spriteStyle) spans = [ GMSStyleSpan(style: stroke) ] } else { let stroke = GMSStrokeStyle.solidColor(.clear) stroke.stampStyle = GMSTextureStyle(image: image) spans = [ GMSStyleSpan(style: stroke) ] } polyline.spans = spans polyline.map = mapView
Objective-C
GMSMutablePath *path = [GMSMutablePath path]; [path addLatitude:-37.81319 longitude:144.96298]; [path addLatitude:-31.95285 longitude:115.85734]; UIImage *_Nonnull image = [UIImage imageNamed:@"imageFromBundleOrAsset"]; // Image could be from anywhere NSArray<GMSStyleSpan *> * spans; if (mapView.mapCapabilities & GMSMapCapabilityFlagsSpritePolylines) { GMSSpriteStyle *spriteStyle = [GMSSpriteStyle spriteStyleWithImage:image]; GMSStrokeStyle *stroke = [GMSStrokeStyle transparentStrokeWithStampStyle:spriteStyle]; spans = @[ [GMSStyleSpan spanWithStyle:stroke] ]; } else { GMSStrokeStyle *stroke = [GMSStrokeStyle solidColor:UIColor.clearColor]; stroke.stampStyle = [GMSTextureStyle textureStyleWithImage:image]; spans = @[ [GMSStyleSpan spanWithStyle:stroke] ]; } GMSPolyline *polyline = [GMSPolyline polylineWithPath:path]; polyline.strokeWidth = 20; polyline.spans = spans; polyline.map = mapView;
התבנית הזו מאפשרת לכם להירשם לשינויים ולהגיב לעדכונים במצב התצוגה של המפה. אפשר גם להטמיע את didChangeMapCapabilities ב-GMSMapViewDelegate כדי לקבל עדכונים על זמינות התכונות.
פוליגונים
פוליגונים דומים לקווים פוליגוניים בכך שהם מורכבים מסדרה של קואורדינטות ברצף מסודר. אבל במקום להיות פתוחים, פוליגונים מיועדים להגדיר אזורים מלאים בתוך לולאה סגורה. פוליגונים מוגדרים ב-SDK של מפות ל-iOS באמצעות המחלקה GMSPolygon.
אפשר להוסיף GMSPolygon למפה באותו אופן שבו מוסיפים GMSPolyline. קודם כל, מציינים את המסלול שלו על ידי יצירת אובייקט GMSMutablePath תואם והוספת נקודות אליו.
הנקודות האלה יוצרות את קווי המתאר של הפוליגון. כל CLLocationCoordinate2D מייצג נקודה על פני כדור הארץ. מקטעי הקווים משורטטים בין הנקודות לפי הסדר שבו מוסיפים אותן למסלול.
הוספת מצולע
- יוצרים אובייקט
GMSMutablePath. - מגדירים את הנקודות בנתיב באמצעות השיטות
addCoordinate:אוaddLatitude:longitude:. הנקודות האלה יוצרות את קווי המתאר של המצולע. - יוצרים אובייקט
GMSPolygonחדש באמצעות הנתיב כארגומנט. - מגדירים מאפיינים אחרים, כמו
strokeWidth, strokeColorו-fillColor, לפי הצורך. - מקצים את הפוליגון לאובייקט
GMSMapViewבאמצעות הגדרת המאפייןGMSPolygon.map. - הפוליגון יופיע במפה.
קטע הקוד הבא מוסיף מלבן למפה.
Swift
// Create a rectangular path let rect = GMSMutablePath() rect.add(CLLocationCoordinate2D(latitude: 37.36, longitude: -122.0)) rect.add(CLLocationCoordinate2D(latitude: 37.45, longitude: -122.0)) rect.add(CLLocationCoordinate2D(latitude: 37.45, longitude: -122.2)) rect.add(CLLocationCoordinate2D(latitude: 37.36, longitude: -122.2)) // Create the polygon, and assign it to the map. let polygon = GMSPolygon(path: rect) polygon.fillColor = UIColor(red: 0.25, green: 0, blue: 0, alpha: 0.05); polygon.strokeColor = .black polygon.strokeWidth = 2 polygon.map = mapView
Objective-C
// Create a rectangular path GMSMutablePath *rect = [GMSMutablePath path]; [rect addCoordinate:CLLocationCoordinate2DMake(37.36, -122.0)]; [rect addCoordinate:CLLocationCoordinate2DMake(37.45, -122.0)]; [rect addCoordinate:CLLocationCoordinate2DMake(37.45, -122.2)]; [rect addCoordinate:CLLocationCoordinate2DMake(37.36, -122.2)]; // Create the polygon, and assign it to the map. GMSPolygon *polygon = [GMSPolygon polygonWithPath:rect]; polygon.fillColor = [UIColor colorWithRed:0.25 green:0 blue:0 alpha:0.05]; polygon.strokeColor = [UIColor blackColor]; polygon.strokeWidth = 2; polygon.map = mapView;
אתם יכולים להתאים אישית את המראה של הפוליגון לפני שאתם מוסיפים אותו למפה וגם אחרי שאתם מוסיפים אותו למפה.
הסרת פוליגון
כדי להסיר מצולע, מגדירים את המאפיין GMSPolygon.map שלו לערך nil ומנתקים את layer מההורה שלו.
Swift
polygon.map = nil polygon.layer.removeFromSuperLayer()
Objective-C
polygon.map = nil; [polygon.layer removeFromSuperlayer];
מעגלים
בנוסף למחלקה הגנרית GMSPolygon, ה-SDK של מפות ל-iOS כולל גם את GMSCircle, שמאפשרת לשרטט עיגולים על פני כדור הארץ.
כדי ליצור מעגל, צריך לציין את שני המאפיינים הבאים:
-
positionבתורCLLocationCoordinate2D. -
radiusבמטרים.
לאחר מכן, מעגל מוגדר כקבוצה של כל הנקודות על פני כדור הארץ שנמצאות במרחק של radius מטרים מהערך הנתון של center. בגלל האופן שבו היטל מרקטור שבו משתמשים ב-Maps API מציג כדור על משטח שטוח, הוא נראה כמו עיגול כמעט מושלם במפה כשהוא ממוקם ליד קו המשווה, ונראה פחות ופחות עגול (על המסך) ככל שהעיגול מתרחק מקו המשווה.
הוספת מעגל
קטע הקוד הבא מוסיף עיגול למפה:
Swift
let circleCenter = CLLocationCoordinate2D(latitude: 37.35, longitude: -122.0) let circle = GMSCircle(position: circleCenter, radius: 1000) circle.map = mapView
Objective-C
CLLocationCoordinate2D circleCenter = CLLocationCoordinate2DMake(37.35, -122.0); GMSCircle *circle = [GMSCircle circleWithPosition:circleCenter radius:1000]; circle.map = mapView;
אפשר להתאים אישית את המראה של העיגול לפני שמוסיפים אותו למפה וגם אחרי שמוסיפים אותו למפה.
התאמה אישית של מעגל
כדי לציין צבעים בהתאמה אישית ורוחב קו, משנים את המאפיינים של GMSCircle. הוא תומך באפשרויות הבאות:
fillColor- אובייקט
UIColorשמציין את הצבע הפנימי של העיגול. ברירת המחדל היא שקוף. strokeColor- אובייקט מסוג
UIColorשמציין את צבע קו המתאר של העיגול. ברירת המחדל היאblackColor. strokeWidth- עובי קו המתאר של העיגול, בנקודות מסך. ברירת המחדל היא 1. העובי לא משתנה כשמגדילים או מקטינים את המפה.
קטע הקוד הבא מוסיף עיגול אדום עבה עם פנים אדום שקוף למחצה.
Swift
circle.fillColor = UIColor(red: 0.35, green: 0, blue: 0, alpha: 0.05) circle.strokeColor = .red circle.strokeWidth = 5
Objective-C
circle.fillColor = [UIColor colorWithRed:0.25 green:0 blue:0 alpha:0.05]; circle.strokeColor = [UIColor redColor]; circle.strokeWidth = 5;
יצירת פוליגון חלול
אפשר לשלב כמה נתיבים באובייקט GMSPolygon אחד כדי ליצור צורות מורכבות, כמו טבעות מלאות או דונאטס (שבהם אזורים פוליגוניים מופיעים בתוך הפוליגון כצורות נפרדות). צורות מורכבות הן קומפוזיציה של כמה נתיבים.
יוצרים פוליגון עם נתיב שמציין את האזור הגדול ביותר שהפוליגון מכסה. לאחר מכן מציינים את המאפיין holes של המצולע כמערך של אובייקט אחד או יותר מסוג GMSPath, שמגדירים את החורים בתוך המצולע.
אם נתיב קטן יותר מוקף כולו בנתיב הגדול יותר, נראה כאילו חלק מהפוליגון הוסר.
דוגמת הקוד הבאה יוצרת פוליגון עם שני חורים:
Swift
let hydeParkLocation = CLLocationCoordinate2D(latitude: -33.87344, longitude: 151.21135) let camera = GMSCameraPosition.camera(withTarget: hydeParkLocation, zoom: 16) let options = GMSMapViewOptions() options.camera = camera let mapView = GMSMapView(options: options) mapView.animate(to: camera) let hydePark = "tpwmEkd|y[QVe@Pk@BsHe@mGc@iNaAKMaBIYIq@qAMo@Eo@@[Fe@DoALu@HUb@c@XUZS^ELGxOhAd@@ZB`@J^BhFRlBN\\BZ@`AFrATAJAR?rAE\\C~BIpD" let archibaldFountain = "tlvmEqq|y[NNCXSJQOB[TI" let reflectionPool = "bewmEwk|y[Dm@zAPEj@{AO" let hollowPolygon = GMSPolygon() hollowPolygon.path = GMSPath(fromEncodedPath: hydePark) hollowPolygon.holes = [GMSPath(fromEncodedPath: archibaldFountain)!, GMSPath(fromEncodedPath: reflectionPool)!] hollowPolygon.fillColor = UIColor(red: 1.0, green: 0.0, blue: 0.0, alpha: 0.2) hollowPolygon.strokeColor = UIColor(red: 1.0, green: 0.0, blue: 0.0, alpha: 1.0) hollowPolygon.strokeWidth = 2 hollowPolygon.map = mapView
Objective-C
CLLocationCoordinate2D hydeParkLocation = CLLocationCoordinate2DMake(-33.87344, 151.21135); GMSCameraPosition *camera = [GMSCameraPosition cameraWithTarget:hydeParkLocation zoom:16]; GMSMapViewOptions *options = [[GMSMapViewOptions alloc] init]; options.camera = camera; mapView = [[GMSMapView alloc] initWithOptions:options]; NSString *hydePark = @"tpwmEkd|y[QVe@Pk@BsHe@mGc@iNaAKMaBIYIq@qAMo@Eo@@[Fe@DoALu@HUb@c@XUZS^ELGxOhAd@@ZB`@J^BhFRlBN\\BZ@`AFrATAJAR?rAE\\C~BIpD"; NSString *archibaldFountain = @"tlvmEqq|y[NNCXSJQOB[TI"; NSString *reflectionPool = @"bewmEwk|y[Dm@zAPEj@{AO"; GMSPolygon *hollowPolygon = [[GMSPolygon alloc] init]; hollowPolygon.path = [GMSPath pathFromEncodedPath:hydePark]; hollowPolygon.holes = @[[GMSPath pathFromEncodedPath:archibaldFountain], [GMSPath pathFromEncodedPath:reflectionPool]]; hollowPolygon.fillColor = [UIColor colorWithRed:1.0 green:0.0 blue:0.0 alpha:0.2]; hollowPolygon.strokeColor = [UIColor colorWithRed:1.0 green:0.0 blue:0.0 alpha:1.0]; hollowPolygon.strokeWidth = 2; hollowPolygon.map = mapView;