تقدم لك حزمة تطوير البرامج (SDK) للخرائط لنظام التشغيل iOS بعض الطرق البسيطة لإضافة أشكال إلى خرائطك. الأشكال التالية معتمدة:
- الخط متعدد الخطوط هو سلسلة من أجزاء الخطوط المتصلة التي يمكن أن تشكل أي شكل تريده، ويمكن استخدامها لوضع علامة على المسارات والمسارات على الخريطة.
- المضلّع هو شكل مغلق يمكن استخدامه لوضع علامات على المناطق على الخريطة.
- الدائرة هي إسقاط دقيق جغرافيًا لدائرة على سطح الأرض.
يمكنك تعديل مظهر كل شكل بعدة طرق.
الخطوط المتعددة
تتيح لك الخطوط المتصلة رسم خطوط على الخريطة. يمثل كائن GMSPolyline
تسلسلاً مرتّبًا للمواقع الجغرافية، ويتم عرضه في شكل سلسلة من المقاطع الخطية. يمكنك ضبط لون الخطوط المتعددة باستخدام GMSStrokeStyle
.
لإنشاء خط متعدد، ستحتاج إلى تحديد مساره عن طريق إنشاء كائن GMSMutablePath
مطابق يحتوي على نقطتين أو أكثر. يمثل كل CLLocationCoordinate2D
نقطة على سطح الأرض. يتم رسم أجزاء الخطوط بين النقاط وفقًا لترتيب إضافتها إلى المسار. يمكنك إضافة نقاط إلى المسار باستخدام طريقتي 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
. بدلاً من ذلك، يمكنك إزالة جميع التراكبات (بما في ذلك الخطوط المتعددة والأشكال الأخرى) الموجودة حاليًا على الخريطة عن طريق استدعاء الطريقة GMSMapView
clear
.
Swift
mapView.clear()
Objective-C
[mapView clear];
تخصيص خطوط متعددة
يوفر الكائن GMSPolyline
عدة خصائص للتحكم في مظهر الخط. وهو يدعم الخيارات التالية:
strokeWidth
- عرض الخط بالكامل، في نقاط الشاشة. الإعداد التلقائي هو 1. لا يتم ضبط العرض عند تكبير الخريطة.
geodesic
-
عندما يكون
YES
، اعرض هذه الحافة المتعددة الخطوط كجيوديسية. تتبع الأجزاء الجيوديسية أقصر مسار على طول سطح الأرض وقد تظهر كخطوط منحنية على إسقاط ماركاتور. يتم رسم الأجزاء غير الجيوديسية كخطوط مستقيمة على الخريطة. ضبط القيمة التلقائية علىNO
. spans
- يُستخدم لتحديد لون جزء أو أكثر من الخطوط المتعددة. والخاصية span هي مصفوفة من
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
. بينما تمنحك هذه الخاصية تحكمًا تفصيليًا في تلوين الخط المتعدد الخطوط، إلا أن هناك العديد من وسائل الراحة التي تجعل من السهل تطبيق نمط واحد على الخط بأكمله.
يستخدم المقتطف أدناه طريقة spanWithColor:
لتغيير لون
الخط بأكمله إلى اللون الأحمر.
Swift
polyline.spans = [GMSStyleSpan(color: .red)]
Objective-C
polyline.spans = @[[GMSStyleSpan spanWithColor:[UIColor redColor]]];
وإذا كان لديك كائن GMSStrokeStyle
، يمكنك استخدام الطريقة 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]];
قبل الإصدار 1.7 من SDK للخرائط على نظام التشغيل iOS، كان الموقع الواحد
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
بعد الشريحة السابقة مباشرة: في المثال أدناه، سيبدأ اللون الرمادي من 1⁄2 حتى الشريحة الثانية ويستمر إلى 1⁄2 خلال الشريحة الثالثة.
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]];
إضافة نمط لون متكرر إلى خط متعدد
إذا كنت تريد إضافة نمط إلى خط متعدد الخطوط، فيمكنك استخدام طريقة الأداة 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);
المضلعات
تشبه المضلعات الخطوط المتعددة في أنها تتكون من سلسلة من الإحداثيات في تسلسل مرتب. ومع ذلك، فبدلاً من أن تكون المضلعات مفتوحة،
فهي مصممة لتحديد المناطق الصلبة داخل حلقة مغلقة. يتم تعريف المضلعات
في حزمة 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 لخرائط Google لنظام التشغيل iOS أيضًا GMSCircle
، مما يسمح لك برسم الدوائر بسهولة على سطح الأرض.
لإنشاء دائرة، يجب تحديد الخاصيتين التاليتين:
position
كـCLLocationCoordinate2D
.radius
بالأمتار.
يتم تعريف الدائرة بعد ذلك بأنها مجموعة جميع النقاط على سطح الأرض والتي
على بعد radius
متر من center
المحدد. ونظرًا لكيفية عرض إسقاط ماركاتور الذي تستخدمه واجهة برمجة التطبيقات للخرائط على سطح مستوٍ،
فسيظهر هذا على شكل دائرة شبه مثالية على الخريطة عند موقعها بالقرب من خط الاستواء، وسيظهر بشكل غير دائري على نحو متزايد (على الشاشة) عندما تتحرك الدائرة بعيدًا عن خط الاستواء.
إضافة دائرة
يضيف مقتطف الشفرة التالي دائرة إلى الخريطة:
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 mapView = GMSMapView.map(withFrame: .zero, camera: camera) 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]; mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera]; 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;