الأشكال

اختَر النظام الأساسي: Android iOS JavaScript

توفر لك حزمة تطوير البرامج بالاستناد إلى بيانات "خرائط Google" لنظام التشغيل 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 للحصول على آخر الأخبار حول مدى توفّر الميزات.

مضلعات

تشبه المضلعات الخطوط المتعددة في أنها تتكون من سلسلة من الإحداثيات في تسلسل مُرتب. ومع ذلك، بدلاً من أن تكون المضلعات مفتوحة، يتم تصميم المضلعات لتحديد المناطق الصلبة داخل حلقة مغلقة. يتم تحديد المضلعات في 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;