أشكال

تنظيم صفحاتك في مجموعات يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.
اختيار نظام أساسي: Android iOS JavaScript

تقدم لك حزمة تطوير البرامج (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];
      

إضافة خط متعدد

  1. أنشئ كائن GMSMutablePath.
  2. يمكنك تحديد النقاط في المسار باستخدام طريقة addCoordinate: أو طريقة addLatitude:longitude:.
  3. إنشاء كائن GMSPolyline جديد باستخدام المسار كوسيطة.
  4. اضبط الخصائص الأخرى، مثل strokeWidth وstrokeColor، على النحو المطلوب.
  5. اضبط السمة map على GMSPolyline.
  6. يظهر الخط المتعدد على الخريطة.

يضيف مقتطف الشفرة التالي مستطيلاً إلى إحدى الخرائط:

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 نقطة على سطح الأرض. يتم رسم أجزاء الخطوط بين النقاط وفقًا للترتيب الذي تمت إضافتها به إلى المسار.

إضافة مضلّع

  1. أنشئ كائن GMSMutablePath.
  2. يمكنك تحديد النقاط في المسار باستخدام طريقة addCoordinate: أو طريقة addLatitude:longitude:. ستشكل هذه النقاط مخطط المضلع.
  3. إنشاء كائن GMSPolygon جديد باستخدام المسار كوسيطة.
  4. اضبط الخصائص الأخرى، مثل strokeWidth وstrokeColor وfillColor، على النحو المطلوب.
  5. حدّد المضلّع لكائن GMSMapView من خلال ضبط السمة GMSPolygon.map.
  6. يظهر المضلع على الخريطة.

يضيف مقتطف الشفرة التالي مستطيلاً إلى الخريطة.

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;