Şekiller

Platform seçin: Android iOS JavaScript

iOS için Haritalar SDK'sı, haritalarınıza şekil eklemek için çeşitli yollar sunar. Aşağıdaki şekiller desteklenir:

  • Çoklu çizgi, istediğiniz herhangi bir şekli oluşturabilen bir dizi bağlı çizgi segmentidir ve harita üzerinde yolları ve rotaları işaretlemek için kullanılabilir.
  • Poligon, haritadaki alanları işaretlemek için kullanılabilecek kapalı bir şekildir.
  • Çember, Dünya yüzeyindeki bir çemberin coğrafi olarak doğru bir projeksiyonudur.

Her şeklin görünümünü çeşitli yollarla değiştirebilirsiniz.

Çoklu çizgiler

Çoklu çizgiler, harita üzerinde çizgiler çizmenize olanak tanır. GMSPolyline nesnesi, bir dizi çizgi segmenti olarak görüntülenen sıralı bir konum dizisini temsil eder. Çoklu çizginin rengini GMSStrokeStyle ile ayarlayabilirsiniz.

Çoklu çizgi oluşturmak için iki veya daha fazla noktayla karşılık gelen bir GMSMutablePath nesnesi oluşturarak çoklu çizginin yolunu belirtmeniz gerekir. Her CLLocationCoordinate2D, Dünya yüzeyinde bir noktayı temsil eder. Çizgi segmentleri, yola eklediğiniz sıraya göre noktalar arasında çizilir. addCoordinate: veya addLatitude:longitude: yöntemleriyle yola noktalar ekleyebilirsiniz.

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

Çoklu çizgi ekleme

  1. GMSMutablePath nesnesi oluşturun.
  2. Yoldaki noktaları addCoordinate: veya addLatitude:longitude: yöntemleriyle ayarlayın.
  3. Yolu bir bağımsız değişken olarak kullanarak yeni bir GMSPolyline nesnesi oluşturun.
  4. strokeWidth ve strokeColor gibi diğer özellikleri gerektiği gibi ayarlayın.
  5. GMSPolyline öğesinin map özelliğini ayarlayın.
  6. Çoklu çizgi, harita üzerinde görünür.

Aşağıdaki kod snippet'i haritaya bir dikdörtgen ekler:

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;
      

Dikdörtgen çoklu çizgi

Çoklu çizgiyi kaldırma

GMSPolyline cihazınızın map özelliğini nil olarak ayarlayarak bir çoklu çizgiyi haritadan kaldırabilirsiniz. Alternatif olarak, GMSMapView clear yöntemini çağırarak haritadaki tüm yer paylaşımlarını (çoklu çizgiler ve diğer şekiller dahil) kaldırabilirsiniz.

Swift

mapView.clear()
      

Objective-C

[mapView clear];
      

Çoklu çizgiyi özelleştirme

GMSPolyline nesnesi, çizginin görünümünü kontrol etmek için çeşitli özellikler sağlar. Aşağıdaki seçenekleri destekler:

strokeWidth
Tüm çizginin ekran noktaları cinsinden genişliği. Varsayılan olarak 1 değerine ayarlanır. Harita yakınlaştırıldığında genişlik ölçeklenmez.
geodesic
YES olduğunda bu çoklu çizgi kenarını jeodezik olarak oluşturun. Jeodezik segmentler Dünya yüzeyindeki en kısa yolu izler ve Merkatör projeksiyonu olan bir haritada eğri çizgiler olarak görünebilir. Jeodezik olmayan segmentler, haritada düz çizgiler olarak çizilir. Varsayılan olarak NO değerine ayarlanır.
spans
Çoklu çizginin bir veya daha fazla segmentinin rengini belirtmek için kullanılır. spans özelliği, GMSStyleSpan nesneden oluşan bir dizidir. Çoklu çizginin rengini değiştirmek için tercih edilen yöntem spans özelliğinin ayarlanmasıdır.
strokeColor
Çoklu çizginin rengini belirten UIColor nesnesi. Varsayılan olarak blueColor değerine ayarlanır. spans ayarlanırsa strokeColor özelliği yoksayılır.

Aşağıdaki snippet, jeodezik interpolasyon ile Melbourne'dan Perth'e kalın bir çoklu çizgi ekler.

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;
      

Haritaya eklenen bir çoklu çizgide değişiklik yapmak için GMSPolyline nesnesini basılı tuttuğunuzdan emin olun.

Swift

polyline.strokeColor = .blue
      

Objective-C

polyline.strokeColor = [UIColor blueColor];
      

Çoklu çizginin rengini değiştirme

Çoklu çizgiler, haritada bir dizi segment olarak çizilir. spans özelliğini kullanarak tek tek segmentlerin veya çizginin tamamının rengini değiştirebilirsiniz. Bu özellik, bir çoklu çizginin rengi üzerinde ayrıntılı kontrol sahibi olmanızı sağlasa da, tüm çizgiye tek bir stil uygulamanıza olanak tanıyan çeşitli avantajlar vardır.

Aşağıdaki snippet, çizginin tamamının rengini kırmızıya dönüştürmek için spanWithColor: yöntemini kullanır.

Swift

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

Objective-C

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

Alternatif olarak, bir GMSStrokeStyle nesnesine zaten erişiminiz varsa spanWithStyle: yöntemini kullanabilirsiniz.

Swift

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

Objective-C

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

iOS için Haritalar SDK'sının 1.7 sürümünden önce, strokeColor tek mülkü bir GMSPolyline öğesinin tüm rengini belirleyebiliyordu. spans özelliği, strokeColor özelliğine göre önceliklidir.

Swift

polyline.strokeColor = .red
      

Objective-C

polyline.strokeColor = [UIColor redColor];
      

Stiller

Uygulamanız aynı fırça rengini birkaç kez uyguluyorsa yeniden kullanılabilir bir stil tanımlamak faydalı olabilir. Çoklu çizgi stilleri, GMSStrokeStyle nesnesi kullanılarak belirtilir. Çizgi stili, düz bir renk veya bir renge renk geçişi olabilir. Stil oluşturduktan sonra, spanWithStyle: yöntemini kullanarak stili bir GMSStyleSpan öğesine uygulayabilirsiniz.

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 stili, çoklu çizginin sonuna veya yeni bir stil ayarlanana kadar devam eder. Çoklu çizginin spans özelliğini tek bir GMSStyleSpan olarak ayarlayarak tüm çizginin rengini değiştirebilirsiniz. Örnekte, bir çoklu çizginin tüm uzunluğuna nasıl renk geçişi uygulanacağı gösterilmektedir.

Swift

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

Objective-C

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

Tek tek çizgi segmentlerinin rengini değiştirme

Çoklu çizginizin her bir segmentinin stilini ayrı ayrı belirlemek isterseniz bunu bir GMSStyleSpan nesne dizisi oluşturup bunu spans özelliğine ileterek yapabilirsiniz. Varsayılan olarak, dizideki her öğe karşılık gelen çizgi segmentinin rengini ayarlar. Dizide satırdaki segmentlerden daha fazla öğe varsa bu fazla öğe yoksayılır. Dizide daha az öğe varsa son GMSStyleSpan satırı, satırın geri kalanının rengini açıklar.

Çoklu çizginizdeki yükseklik veya hız gibi değişiklikleri belirtmek için renk blokları ve/veya gradyan çoklu çizgileri kullanabilirsiniz. Aşağıdaki snippet, bir çoklu çizginin ilk iki parçasının rengini kırmızıya, geri kalanı ise kırmızıdan sarıya bir renk geçişi olarak ayarlar.

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

Birden fazla segmentin stilini tek seferde ayarlamak için spanWithStyle:segments: yöntemini kullanabilirsiniz. Örneğin, aşağıdaki kod yukarıdakiyle eşdeğerdir. Stil, satırın kalan kısmını tanımlamak için kullanıldığından son GMSStyleSpan segment uzunluğu her zaman yoksayılır.

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

Kesirli segmentler

Segmentler kesirli değer olarak da belirtilebilir. Bu işlem, stili segmentlerin kesirli sayısına uygular ve potansiyel olarak tek bir segmentin bölünmesine neden olur. Her GMSStyleSpan bir öncekinden hemen sonra başlar: Aşağıdaki örnekte, gri renk 1⁄2'den ikinci segmente kadar başlayıp üçüncü segmente kadar 1⁄2'ye kadar devam eder.

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

Çoklu çizgiye tekrarlanan bir renk deseni ekleme

Çoklu çizgiye kalıp eklemek istiyorsanız GMSGeometryUtils içindeki GMSStyleSpans yardımcı programı yöntemini kullanabilirsiniz. GMSStyleSpans yöntemi, yinelenen bir kalıbı tanımlayan iki diziyi kabul eder. Bir dizi tekrarlanması gereken stilleri, diğeri ise tekrar aralığını tanımlar. Birlikte kullanıldığında, uzunluğu veya mevcut segment sayısı ne olursa olsun herhangi bir çoklu çizgiye uygulanabilecek bir desen oluşturabilirsiniz.

Örneğin, aşağıdaki kod snippet'i siyah beyaz alternatif desenine sahip bir çoklu çizgi tanımlar. Tür kGMSLengthRhumb olarak belirtildiği için uzunlukları, başparmak çizgisi boyunca (Mercator'da bu düz bir çizgidir) metre olarak kabul edilir.

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

İmge Damgalı Çoklu Çizgiler

İmge Damgalı çoklu çizgiler, seçtiğiniz tekrar eden bir bit eşlem resmini kullanarak bir çoklu çizgi oluşturmanıza olanak tanır. Şekiller net bir arka plan çizgisiyle gösterilir, ancak damga çizgi köşelerinde kısaltılmadığından, yaya yol tariflerini gösteren noktalar gibi durumlar için faydalıdır.

Çoklu çizgi damgalı

Bu özelliği GMSSpriteStyle kullanarak kullanabilir ve GMSStrokeStyle stampStyle özelliğini kullanarak damga olarak ayarlayabilirsiniz.

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;
      

Doku Damgalı Çoklu Çizgiler

Doku damgalı çoklu çizgiler, istediğiniz tekrarlanan dokuyu kullanarak bir çoklu çizgi oluşturmanıza olanak tanır. Şekiller net, düz renk veya gradyan arka plan çizgisiyle gösterilebilir. Yakınlaştırma düzeyleri değiştikçe doku yeniden boyutlandırılır. Yolların veya yol noktalarının sonundaki ya da başlangıcındaki görüntüler belirli yakınlaştırma düzeylerinde kesilir.

Dokulu çoklu çizgi

Bu özelliği GMSTextureStyle kullanarak ve GMSStrokeStyle stampStyle özelliğini kullanarak damga olarak ayarlayabilirsiniz.

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;
      

Harita Özellikleri

GMSMapView üzerindeki mapCapabilities özelliği, haritaya özgü özellikler için programatik kontrol ekler. Bu, belirli API'leri çağırmadan önce belirli capabilities haritalarının kullanılabilir olup olmadığını bilmek istediğinizde faydalıdır. Bu sorgu, harita görünümünün Model Damgalı Çoklu Çizgileri destekleyip desteklemediğini belirler.

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;
      

Bu kalıp, değişikliklere abone olmanıza ve güncellemelere harita görünümü durumunuzla tepki vermenize olanak tanır. Özellik kullanılabilirliği hakkında güncellemeler almak için GMSMapViewDelegate üzerinde didChangeMapCapabilities özelliğini de uygulayabilirsiniz.

Poligonlar

Poligonlar, sıralanmış bir dizi koordinattan oluşması açısından çoklu çizgilere benzer. Ancak, poligonlar açık uçlu olmak yerine kapalı bir döngü içindeki katı bölgeleri tanımlamak için tasarlanmıştır. Poligonlar, iOS için Haritalar SDK'sında GMSPolygon sınıfıyla tanımlanır.

Tıpkı GMSPolyline ekler gibi haritaya GMSPolygon ekleyebilirsiniz. Öncelikle, karşılık gelen bir GMSMutablePath nesnesi oluşturup buna noktalar ekleyerek yolunu belirtin. Bu noktalar çokgenin ana hatlarını oluşturur. Her CLLocationCoordinate2D, Dünya yüzeyindeki bir noktayı temsil eder. Noktalar arasında çizgi segmentleri, onları yola eklediğiniz sıraya göre çizilir.

Poligon ekle

  1. GMSMutablePath nesnesi oluşturun.
  2. Yoldaki noktaları addCoordinate: veya addLatitude:longitude: yöntemleriyle ayarlayın. Bu noktalar, poligonun ana hatlarını oluşturur.
  3. Yolu bir bağımsız değişken olarak kullanarak yeni bir GMSPolygon nesnesi oluşturun.
  4. strokeWidth, strokeColor ve fillColor gibi diğer özellikleri istediğiniz gibi ayarlayın.
  5. GMSPolygon.map özelliğini ayarlayarak çokgeni bir GMSMapView nesnesine atayın.
  6. Poligon haritada görünür.

Aşağıdaki kod snippet'i haritaya bir dikdörtgen ekler.

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;
      

Çokgenin görünümünü hem haritaya eklemeden önce hem de haritaya eklendikten sonra özelleştirebilirsiniz.

Çokgen kaldırma

GMSPolygon.map özelliğini nil olarak ayarlayıp layer öğesini üst öğeden ayırarak bir çokgeni kaldırın.

Swift

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

Objective-C

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

Daireler

Genel GMSPolygon sınıfına ek olarak, iOS için Haritalar SDK'sı ayrıca dünya yüzeyinde daire çizmenize olanak tanıyan GMSCircle özelliğini de içerir.

Daire oluşturmak için aşağıdaki iki özelliği belirtmelisiniz:

  • CLLocationCoordinate2D olarak position.
  • Metre cinsinden radius.

Çember, Dünya yüzeyinde belirtilen center değerinden radius metre uzaktaki tüm noktaların kümesi olarak tanımlanır. Maps API tarafından kullanılan Mercator projeksiyonunun düz bir yüzey üzerinde bir küre oluşturma şekli nedeniyle bu, ekvatorun yakınında olduğunda haritada neredeyse mükemmel bir daire olarak görünür ve daire ekvatordan uzaklaştıkça giderek daha dairesel olmayan (ekranda) görünür.

Çevre ekleme

Aşağıdaki kod snippet'i haritaya bir daire ekler:

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;
      

Daireyi hem haritaya eklemeden önce hem de haritaya ekledikten sonra görünümünü özelleştirebilirsiniz.

Çevre özelleştirme

GMSCircle özelliklerini değiştirerek özel renkler ve fırça genişlikleri belirtebilirsiniz. Aşağıdaki seçenekleri destekler:

fillColor
Çemberin iç rengini belirten bir UIColor nesnesi. Varsayılan olarak şeffaf değerine ayarlanır.
strokeColor
Dairenin dış çizgisinin rengini belirten bir UIColor nesnesi. Varsayılan olarak blackColor değerine ayarlanır.
strokeWidth
Ekran noktaları cinsinden dairenin dış çizgisinin kalınlığı. Varsayılan olarak 1 değerine ayarlanır. Harita yakınlaştırıldığında, kalınlık ölçeklenmez.

Aşağıdaki snippet, yarı saydam kırmızı bir iç mekana sahip kalın kırmızı bir daire ekler.

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;
      

Boş poligon oluşturma

Doldurulmuş halkalar veya halkalar (poligonal alanlar poligon içinde ayrı şekiller olarak görünür) gibi karmaşık şekiller oluşturmak için birden fazla yolu tek bir GMSPolygon nesnesinde birleştirebilirsiniz. Karmaşık şekiller birden çok yolun bileşimidir.

Poligonun kapsadığı en büyük alanı belirten yola sahip bir poligon oluşturun. Ardından poligonun holes özelliğini, bir veya daha fazla GMSPath nesneden oluşan bir dizi olarak belirtin. Bu dizi, poligon içindeki delikleri tanımlar.

Daha küçük bir yol, daha büyük yolun içinde tamamen kapalıysa poligonun bir parçası kaldırılmış gibi görünür.

Aşağıdaki kod örneği iki delikli bir poligon oluşturur:

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;