الأشكال

اختيار النظام الأساسي: 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) لـ "خرائط Google" لنظام التشغيل 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 صفيفَتين تحددان نمطًا متكررًا. يحدد الصفيفة الأنماط التي يجب تكرارها، والآخر يحدد فاصل التكرار. عند استخدامهما معًا، يمكنك إنشاء نمط يمكن تطبيقه على أي خطوط متعددة، بغض النظر عن طوله أو عدد القطع المتاحة.

على سبيل المثال، يحدد مقتطف الرمز أدناه خطًا متعددًا بنمط بديل بالأبيض والأسود. يتم التعامل مع أطوالها بالأمتار على طول خط الإزاحة (في Mercator، هذا خط مستقيم) حيث يتم تحديد النوع على أنه 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];
polyline.strokeWidth = 20;
GMSPolyline *polyline = [GMSPolyline polylineWithPath:path];

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 معينة متاحة قبل استدعاء واجهات برمجة تطبيقات محددة. يحدّد طلب البحث هذا ما إذا كان عرض الخريطة يتيح استخدام خطوط متوازية تتضمّن ختم Sprite.

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 للحصول على آخر المعلومات عن مدى توفّر الميزات.

مضلعات

تتشابه المضلعات مع الخطوط المتعددة في أنها تتكون من سلسلة من الإحداثيات في تسلسل مُرتب. ومع ذلك، بدلاً من أن تكون المضلعات مفتوحة، تم تصميمها لتحديد المناطق الصلبة داخل حلقة مغلقة. يتم تحديد المضلعات في حزمة تطوير البرامج بالاستناد إلى بيانات "خرائط Google" لنظام التشغيل 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 المحدد. نظرًا للطريقة التي يعرض بها إسقاط Mercator المستخدم في واجهة برمجة التطبيقات للخرائط كرة على سطح مستوٍ، تظهر هذه الدائرة كدائرة شبه مثالية على الخريطة عند موقعها بالقرب من خط الاستواء، وتبدو بشكل متزايد غير دائري (على الشاشة) عند ابتعاد الدائرة عن خط الاستواء.

إضافة دائرة

يضيف مقتطف الرمز التالي دائرة إلى الخريطة:

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;