شکل‌ها

پلاتفرم را انتخاب کنید: Android iOS JavaScript

کیت توسعه نرم‌افزار Google Maps برای 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)
      

آبجکتیو-سی

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
      

آبجکتیو-سی

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()
      

آبجکتیو-سی

[mapView clear];
      

سفارشی‌سازی چندخطی

شیء GMSPolyline چندین ویژگی برای کنترل ظاهر خط ارائه می‌دهد. از گزینه‌های زیر پشتیبانی می‌کند:

strokeWidth
عرض کل خط، به نقطه صفحه. پیش‌فرض ۱ است. با بزرگ‌نمایی نقشه، عرض تغییر نمی‌کند.
geodesic
وقتی YES، این لبه چندخطی را به‌عنوان ژئودزیک ارائه کن. بخش‌های ژئودزیک کوتاه‌ترین مسیر را در امتداد سطح زمین دنبال می‌کنند و ممکن است به‌صورت خطوط منحنی در نقشه‌ای با تصویر مرکاتور ظاهر شوند. بخش‌های غیرژئودزیک به‌صورت خطوط مستقیم روی نقشه ترسیم می‌شوند. پیش‌فرض‌ها به NO.
spans
برای مشخص کردن رنگ یک یا چند بخش از چندخطی استفاده می‌شود. ویژگی spans آرایه‌ای از اشیای GMSStyleSpan است. تنظیم کردن ویژگی spans روش ترجیحی برای تغییر دادن رنگ چندخطی است.
strokeColor
شیء UIColor که رنگ چندخطی را مشخص می‌کند. پیش‌فرض‌ها به blueColor. اگر spans تنظیم شده باشد، خصوصیت strokeColor نادیده گرفته می‌شود.

قطعه کد زیر یک چندخطی ضخیم از ملبورن به پرت با درون‌یابی ژئودزیک اضافه می‌کند.

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
      

آبجکتیو-سی

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
      

آبجکتیو-سی

polyline.strokeColor = [UIColor blueColor];
      

تغییر دادن رنگ چندخطی

چندخطی‌ها به‌صورت مجموعه‌ای از بخش‌ها روی نقشه ترسیم می‌شوند. می‌توانید رنگ بخش‌های مجزا یا کل خط را با ویژگی spans تغییر دهید. While this property gives you detailed control over the coloring of a polyline, several conveniences exist that allow you to apply a single style to the entire line.

قطعه کد زیر از روش spanWithColor: برای تغییر رنگ کل خط به قرمز استفاده می‌کند.

Swift

polyline.spans = [GMSStyleSpan(color: .red)]
      

آبجکتیو-سی

polyline.spans = @[[GMSStyleSpan spanWithColor:[UIColor redColor]]];
      

یا اگر ازقبل به شیء GMSStrokeStyle دسترسی دارید، می‌توانید از روش spanWithStyle: استفاده کنید.

Swift

let solidRed = GMSStrokeStyle.solidColor(.red)
polyline.spans = [GMSStyleSpan(style: solidRed)]
      

آبجکتیو-سی

GMSStrokeStyle *solidRed = [GMSStrokeStyle solidColor:[UIColor redColor]];
polyline.spans = @[[GMSStyleSpan spanWithStyle:solidRed]];
      

قبل‌از نسخه ۱.۷ «کیت توسعه نرم‌افزار Maps برای iOS»، ویژگی تکی strokeColor برای تنظیم کل رنگ GMSPolyline دردسترس بود. خصوصیت spans بر strokeColor اولویت دارد.

Swift

polyline.strokeColor = .red
      

آبجکتیو-سی

polyline.strokeColor = [UIColor redColor];
      

سبک‌ها

اگر برنامه‌تان چندین‌بار از یک رنگ قلم استفاده می‌کند، شاید بهتر باشد سبک قابل‌استفاده مجددی تعریف کنید. سبک‌های چندخطی بااستفاده از شیء GMSStrokeStyle مشخص می‌شوند. سبک خط می‌تواند رنگی یکدست یا گرادیانی از یک رنگ به رنگ دیگر باشد. وقتی سبکی ایجاد کردید، می‌توانید آن را با روش spanWithStyle: به GMSStyleSpan اعمال کنید.

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)
      

آبجکتیو-سی

// 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)]
      

آبجکتیو-سی

polyline.spans = @[[GMSStyleSpan spanWithStyle:redYellow]];
      

تغییر دادن رنگ بخش‌های خط به‌صورت جداگانه

اگر می‌خواهید هر بخش از چندخطی‌تان را به‌طور جداگانه سبک‌بندی کنید، می‌توانید این کار را با ایجاد آرایه‌ای از اشیاء GMSStyleSpan و ارسال آن به ویژگی spans انجام دهید. به‌طور پیش‌فرض، هر مورد در آرایه رنگ پاره‌خط مربوطه را تنظیم می‌کند. اگر تعداد عناصر آرایه بیشتر از بخش‌های خط باشد، عناصر اضافی نادیده گرفته می‌شوند. اگر تعداد عناصر در آرایه کمتر باشد، GMSStyleSpan نهایی رنگ باقی‌مانده خط را توصیف می‌کند.

می‌توانید از بلوک‌های رنگی و/یا چندخطی‌های گرادیان برای نشان دادن تغییرات درطول چندخطی‌تان (مثلاً ارتفاع یا سرعت) استفاده کنید. قطعه کد زیر رنگ دو بخش اول چندخطی را قرمز می‌کند و بقیه خط گرادیانی از قرمز به زرد است.

Swift

polyline.spans = [
  GMSStyleSpan(style: solidRed),
  GMSStyleSpan(style: solidRed),
  GMSStyleSpan(style: redYellow)
]
      

آبجکتیو-سی

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)
]
      

آبجکتیو-سی

polyline.spans = @[[GMSStyleSpan spanWithStyle:solidRed segments:2],
                   [GMSStyleSpan spanWithStyle:redYellow segments:10]];
      

بخش‌های کسری

بخش‌ها را می‌توان به‌صورت مقدار کسری نیز مشخص کرد. با این کار، سبک به تعداد کسری از بخش‌ها اعمال می‌شود و احتمالاً باعث تقسیم شدن یک بخش می‌شود. هر GMSStyleSpan بلافاصله پس‌از قبلی شروع می‌شود: در مثال زیر، رنگ خاکستری از نیمه بخش دوم شروع می‌شود و تا نیمه بخش سوم ادامه می‌یابد.

Swift

polyline.spans = [
  GMSStyleSpan(style: solidRed, segments: 2.5),
  GMSStyleSpan(color: .gray),
  GMSStyleSpan(color: .purple, segments: 0.75),
  GMSStyleSpan(style: redYellow)
]
      

آبجکتیو-سی

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
)
      

آبجکتیو-سی

NSArray *styles = @[[GMSStrokeStyle solidColor:[UIColor whiteColor]],
                    [GMSStrokeStyle solidColor:[UIColor blackColor]]];
NSArray *lengths = @[@100000, @50000];
polyline.spans = GMSStyleSpans(polyline.path, styles, lengths, kGMSLengthRhumb);
      

چندخطی‌های اسپرایت‌دار

چندخطی‌های Sprite Stamped به شما امکان می‌دهد بااستفاده از تصویر نگاشت بیتی تکرارشونده موردنظرتان چندخطی ایجاد کنید. شکل‌ها با خط پیرامونی پس‌زمینه واضحی نشان داده می‌شوند، اما مُهر در گوشه‌های خط بریده نمی‌شود - این ویژگی برای موقعیت‌هایی مانند نشان دادن نقطه‌ها برای تصویرسازی مسیرهای پیاده‌روی مفید است.

چندخطی با مهر اسپرایت

می‌توانید از این ویژگی بااستفاده از 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
      

آبجکتیو-سی

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;

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
      

آبجکتیو-سی

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 نقشه خاصی قبل‌از فراخوانی میاناهای برنامه‌سازی کاربردی خاص دردسترس است یا نه. این پُرسمان تعیین می‌کند که آیا نمای نقشه از «چندخطی‌های مُهرشده با اِسپریت» پشتیبانی می‌کند یا نه.

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
      

آبجکتیو-سی

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 پیاده‌سازی کنید تا به‌روزرسانی‌های مربوط به دردسترس بودن ویژگی را دریافت کنید.

چندضلعی‌ها

چندضلعی‌ها شبیه چندخطی‌ها هستند زیرا از مجموعه‌ای از مختصات در یک توالی مرتب تشکیل شده‌اند. بااین‌حال، چندضلعی‌ها به‌جای اینکه باز باشند، طوری طراحی شده‌اند که مناطق توپر را در یک حلقه بسته تعریف کنند. چندضلعی‌ها در کیت توسعه نرم‌افزار Maps برای iOS با کلاس GMSPolygon تعریف می‌شوند.

می‌توانید GMSPolygon را به همان روشی که GMSPolyline را اضافه می‌کنید به نقشه اضافه کنید. ابتدا، مسیر آن را با ایجاد شیء GMSMutablePath مربوطه و افزودن نقاط به آن مشخص کنید. این نقطه‌ها طرح کلی چندضلعی را تشکیل می‌دهند. هر CLLocationCoordinate2D نشان‌دهنده نقطه‌ای روی سطح زمین است. پاره‌خط‌ها بین نقاط براساس ترتیبی که آن‌ها را به مسیر اضافه می‌کنید کشیده می‌شوند.

افزودن چندضلعی

  1. شیء GMSMutablePath ایجاد کنید.
  2. نقاط مسیر را با روش‌های addCoordinate: یا addLatitude:longitude: تنظیم کنید. این نقاط طرح کلی چندضلعی را تشکیل می‌دهند.
  3. شیء GMSPolygon جدیدی را بااستفاده از مسیر به‌عنوان آرگومان نمونه‌سازی کنید.
  4. ویژگی‌های دیگر، مانند strokeWidth، strokeColor، و fillColor را به‌دلخواه تنظیم کنید.
  5. با تنظیم کردن ویژگی GMSPolygon.map، چندضلعی را به شیء GMSMapView اختصاص دهید.
  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
      

آبجکتیو-سی

// 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 از والد آن، Polygon را بردارید.

Swift

 polygon.map = nil
 polygon.layer.removeFromSuperLayer()

آبجکتیو-سی

 polygon.map = nil;
 [polygon.layer removeFromSuperlayer];
 

حلقه

علاوه‌بر کلاس عمومی GMSPolygon، کیت توسعه نرم‌افزار Google Maps برای iOS شامل GMSCircle نیز می‌شود که به شما امکان می‌دهد دایره‌هایی روی سطح زمین بکشید.

برای ساختن دایره، باید دو ویژگی زیر را مشخص کنید:

  • ‫position به‌عنوان CLLocationCoordinate2D.
  • radius به متر.

سپس دایره‌ای تعریف می‌شود که مجموعه‌ای از همه نقاط روی سطح زمین است که radius متر از center داده‌شده فاصله دارند. به‌دلیل نحوه نمایش کره روی سطح صاف توسط تصویر مرکاتور که توسط Maps API استفاده می‌شود، این دایره وقتی نزدیک خط استوا قرار دارد، تقریباً به‌صورت یک دایره کامل روی نقشه ظاهر می‌شود و با دور شدن دایره از خط استوا، به‌طور فزاینده‌ای غیردایره‌ای (روی صفحه) ظاهر می‌شود.

افزودن حلقه

تکه‌کد زیر دایره‌ای به نقشه اضافه می‌کند:

Swift

let circleCenter = CLLocationCoordinate2D(latitude: 37.35, longitude: -122.0)
let circle = GMSCircle(position: circleCenter, radius: 1000)
circle.map = mapView
      

آبجکتیو-سی

CLLocationCoordinate2D circleCenter = CLLocationCoordinate2DMake(37.35, -122.0);
GMSCircle *circle = [GMSCircle circleWithPosition:circleCenter
                                         radius:1000];
circle.map = mapView;
      

می‌توانید ظاهر دایره را هم قبل‌از افزودن آن به نقشه و هم بعداز افزودن آن به نقشه سفارشی‌سازی کنید.

سفارشی‌سازی حلقه

با اصلاح کردن ویژگی‌های GMSCircle می‌توانید رنگ‌های سفارشی و پهنای خط را مشخص کنید. از گزینه‌های زیر پشتیبانی می‌کند:

fillColor
شیء UIColor که رنگ داخلی دایره را مشخص می‌کند. به‌طور پیش‌فرض شفاف است.
strokeColor
شیء UIColor که رنگ طرح کلی دایره را مشخص می‌کند. پیش‌فرض‌ها به blackColor.
strokeWidth
ضخامت خط پیرامونی دایره، به نقطه صفحه‌نمایش. پیش‌فرض ۱ است. وقتی نقشه بزرگ‌نمایی می‌شود، ضخامت تغییر نمی‌کند.

قطعه کد زیر یک دایره قرمز ضخیم با فضای داخلی قرمز نیمه‌شفاف اضافه می‌کند.

Swift

circle.fillColor = UIColor(red: 0.35, green: 0, blue: 0, alpha: 0.05)
circle.strokeColor = .red
circle.strokeWidth = 5
      

آبجکتیو-سی

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 options = GMSMapViewOptions()
options.camera = camera
let mapView = GMSMapView(options: options)
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
      

آبجکتیو-سی

CLLocationCoordinate2D hydeParkLocation = CLLocationCoordinate2DMake(-33.87344, 151.21135);
GMSCameraPosition *camera = [GMSCameraPosition cameraWithTarget:hydeParkLocation
                                                           zoom:16];
GMSMapViewOptions *options = [[GMSMapViewOptions alloc] init];
options.camera = camera;
mapView = [[GMSMapView alloc] initWithOptions:options];

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;