الأشكال

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

على سبيل المثال، يحدد مقتطف الرمز أدناه خطًا متعدد الخطوط بنمط بديل بالأبيض والأسود. ويتم التعامل مع طوله على أنّه أمتار على خط مستقيم (يكون هذا الخط مستقيمًا في أداة "ميركاتور") كما تم تحديد النوع 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 Stamped Polylines.

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

إضافة دائرة

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

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;