Şekiller

Platform seçin: Android iOS JavaScript

iOS için Haritalar SDK'sı, haritalara şekil eklemek için çeşitli yöntemler sunar. Aşağıdaki şekiller desteklenir:

  • Çoklu çizgi, istediğiniz şekli oluşturabilen ve haritada yolları ve rotaları işaretlemek için kullanılabilen, birbirine bağlı bir dizi çizgi segmentidir.
  • Poligon, haritada alanları işaretlemek için kullanılabilen kapalı bir şekildir.
  • Daire, Dünya'nın yüzeyindeki bir dairenin coğrafi olarak doğru bir projeksiyonudur.

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

Çoklu çizgiler

Poli çizgiler, haritada çizgi çizmenize olanak tanır. GMSPolyline objesi, bir dizi çizgi segmenti olarak görüntülenen sıralı bir konum dizisini temsil eder. GMSStrokeStyle ile bir çok çizginin rengini ayarlayabilirsiniz.

Bir çok çizgi oluşturmak için iki veya daha fazla nokta içeren karşılık gelen bir GMSMutablePath nesnesi oluşturarak yolunu belirtmeniz gerekir. Her CLLocationCoordinate2D, Dünya'nın yüzeyindeki bir noktayı temsil eder. Çizgi segmentleri, noktalara eklediğiniz sıraya göre çizilir. addCoordinate: veya addLatitude:longitude: yöntemleriyle yola nokta 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. Bir GMSMutablePath nesnesi oluşturun.
  2. Yoldaki noktaları addCoordinate: veya addLatitude:longitude: yöntemleriyle ayarlayın.
  3. Yolu bağımsız değişken olarak kullanarak yeni bir GMSPolyline nesnesi oluşturun.
  4. Gerekirse strokeWidth ve strokeColor gibi diğer özellikleri ayarlayın.
  5. GMSPolyline öğesinin map özelliğini ayarlayın.
  6. Poli çizgisi haritada görünür.

Aşağıdaki kod snippet'i bir haritaya 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 çizgileri kaldırma

GMSPolyline öğenizin map mülkünü nil olarak ayarlayarak bir çok ç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 çizgileri ö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
Satırın tamamının genişliği (ekran noktası cinsinden). Varsayılan olarak 1 değerine ayarlanır. Harita yakınlaştırıldığında genişlik ölçeklendirilmez.
geodesic
YES olduğunda bu çoklu çizgi kenarını jeodezik olarak oluşturun. Geodezitik segmentler, Dünya yüzeyindeki en kısa yolu takip eder ve Mercator projeksiyonuna sahip bir haritada kavisli çizgiler olarak görünebilir. Geodeziden olmayan segmentler haritada düz çizgiler olarak çizilir. Varsayılan olarak NO değerine ayarlanır.
spans
Bir çok çizginin bir veya daha fazla segmentinin rengini belirtmek için kullanılır. spans özelliği, GMSStyleSpan nesnelerinden oluşan bir dizidir. Bir çok çizginin rengini değiştirmenin tercih edilen yolu spans özelliğini ayarlamaktır.
strokeColor
Poli çizginin rengini belirten bir UIColor nesnesi. Varsayılan olarak blueColor değerine ayarlanır. spans ayarlanmışsa strokeColor özelliği yoksayılır.

Aşağıdaki snippet, Melbourne'dan Perth'e jeodezik enterpolasyonla kalın bir poli çizgisi 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;
      

Bir çok çizgiyi haritaya ekledikten sonra değiştirmek için GMSPolyline nesnesini tutmaya devam edin.

Swift

polyline.strokeColor = .blue
      

Objective-C

polyline.strokeColor = [UIColor blueColor];
      

Poli çizginin rengini değiştirme

Poli çizgiler haritada bir dizi segment olarak çizilir. spans mülkünü kullanarak segmentlerin tek tek veya satırın tamamının rengini değiştirebilirsiniz. Bu özellik, bir çok çizginin renklendirilmesi üzerinde ayrıntılı kontrol sahibi olmanızı sağlar. Bununla birlikte, çizginin tamamına tek bir stil uygulamanıza olanak tanıyan çeşitli kolaylıklar vardır.

Aşağıdaki snippet'te, çizginin tamamının rengini kırmızıya değiştirmek için spanWithColor: yöntemi kullanılmaktadı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, GMSPolyline öğesinin tüm rengini ayarlamak için tek bir strokeColor mülkü kullanılabiliyordu. spans özelliği, strokeColor özelliğine göre daha önceliklidir.

Swift

polyline.strokeColor = .red
      

Objective-C

polyline.strokeColor = [UIColor redColor];
      

Stiller

Uygulamanız aynı çizgi rengini birkaç kez uyguluyorsa yeniden kullanılabilir bir stil tanımlamak yararlı olabilir. Çoklu çizgi stilleri GMSStrokeStyle nesnesi kullanılarak belirtilir. Bir çizgi stili, düz renk veya bir renkten başka bir renge geçiş yapan bir gradyan olabilir. Bir stil oluşturduktan sonra spanWithStyle: yöntemini kullanarak bu stili 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'nin stili, çoklu çizginin sonuna kadar veya yeni bir stil ayarlanana kadar devam eder. Bir çok çizginin spansözelliğini tek bir GMSStyleSpan olarak ayarlayarak çizginin tamamını değiştirebilirsiniz. Örnekte, çok çizginin tüm uzunluğuna nasıl degrade uygulanacağı gösterilmektedir.

Swift

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

Objective-C

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

Satır segmentlerinin rengini tek tek değiştirme

Poli çizginizin her segmentine ayrı ayrı stil uygulamak istiyorsanız bir GMSStyleSpan nesnesi dizisi oluşturup bunu spans mülküne iletebilirsiniz. Varsayılan olarak, dizideki her öğe, ilgili çizgi segmentinin rengini belirler. Dizede satırdaki segmentlerden daha fazla öğe varsa fazla öğeler yoksayılır. Dizideki öğe sayısı daha azsa son GMSStyleSpan, satırın geri kalanının rengini tanımlar.

Poli çizginizdeki değişiklikleri (ör. yükseklik veya hız) belirtmek için renk blokları ve/veya degrade poli çizgileri kullanabilirsiniz. Aşağıdaki snippet, bir çok çizginin ilk iki segmentinin rengini kırmızı olarak ayarlar. Çizginin geri kalanı ise kırmızıdan sarıya doğru bir degradedir.

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

Stili birden fazla segment için tek seferde ayarlamak üzere spanWithStyle:segments: yöntemini kullanabilirsiniz. Örneğin, aşağıdaki kod yukarıdakine eşdeğerdir. Stil, satırın geri kalanını tanımlamak için kullanıldığından son GMSStyleSpan öğesinin 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]];
      

Kısmi segmentler

Segmentler kesirli değer olarak da belirtilebilir. Bu işlem, stili kesirli sayıda segmente uygular ve tek bir segmentin bölünmesine neden olabilir. Her GMSStyleSpan, öncekinin hemen ardından başlar: Aşağıdaki örnekte, gri renk ikinci segmentin ½'sinden başlar ve üçüncü segmentin ½'sine 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]];
      

Bir çoklu çizgiye tekrarlanan renk deseni ekleme

Bir çok çizgiye desen eklemek istiyorsanız GMSGeometryUtils'daki GMSStyleSpans yardımcı yöntemini kullanabilirsiniz. GMSStyleSpans yöntemi, tekrarlanan bir örüntüyü tanımlayan iki diziyi kabul eder. Bir dizi, tekrarlanması gereken stilleri ayarlar, diğeri ise tekrarlama aralığını tanımlar. Bu ikisini birlikte kullanarak, uzunluğu veya mevcut segment sayısı fark etmeksizin herhangi bir çoklu çizgiye uygulanabilecek bir desen oluşturabilirsiniz.

Örneğin, aşağıdaki kod snippet'inde siyah ve beyazın dönüşümlü olarak kullanıldığı bir çok çizgi tanımlanmaktadır. Tür kGMSLengthRhumb olarak belirtildiğinden uzunlukları, bir rhumb çizgisi boyunca metre cinsinden işlenir (Mercator'da bu düz bir çizgidir).

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

Sprite Damgalı Çoklu Çizgiler

Sprite damgalanmış çoklu çizgiler, seçtiğiniz tekrarlanan bir bitmap resmini kullanarak çoklu çizgi oluşturmanıza olanak tanır. Şekiller net bir arka plan çizgisiyle gösterilir ancak damga, çizgi köşelerinde kesilmez. Bu sayede, yürüyüş yönlerini gösteren noktalar gibi durumlarda kullanılabilir.

Sprite damgalanmış çoklu çizgi

Bu özelliği, GMSStrokeStyle'in stampStyle mülkünü kullanarak GMSSpriteStyle'u damga olarak ayarlayarak kullanabilirsiniz.

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 bir dokuyu tekrarlayarak çoklu çizgi oluşturmanıza olanak tanır. Şekiller net, düz renk veya degrade arka plan çizgisiyle gösterilebilir. Yakınlaştırma seviyeleri değiştikçe doku yeniden boyutlandırılır. Yolların veya yol noktalarının sonundaki ya da başındaki resimler belirli yakınlaştırma düzeylerinde kısaltılır.

Dokulu çoklu çizgi

Bu özelliği, GMSTextureStyle kullanarak ve GMSStrokeStyle'in stampStyle özelliğini kullanarak damga olarak ayarlayarak kullanabilirsiniz.

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 adresindeki mapCapabilities mülkü, haritaya özgü özellikler için programatik kontrol ekler. Bu, belirli API'leri çağırmadan önce belirli bir haritanın capabilities kullanılabilir olup olmadığını öğrenmek istediğinizde kullanışlıdır. Bu sorgu, harita görünümünün Sprite Damgalı Poli ç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 harita görüntüleme durumunuzla güncellemelere tepki vermenize olanak tanır. Ayrıca, özellik kullanılabilirliğiyle ilgili güncellemeler almak için GMSMapViewDelegate tarihinde didChangeMapCapabilities'ü de uygulayabilirsiniz.

Poligonlar

Çokgenler, sıralı bir sıradaki bir dizi koordinattan oluşmaları 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ı tarafından tanımlanır.

Haritaya GMSPolyline eklediğiniz şekilde GMSPolygon ekleyebilirsiniz. Öncelikle, ilgili bir GMSMutablePath nesnesi oluşturup buna noktalar ekleyerek yolunu belirtin. Bu noktalar, poligonun ana hatlarını oluşturur. Her CLLocationCoordinate2D, Dünya yüzeyindeki bir noktayı temsil eder. Noktalar arasındaki çizgi segmentleri, yola ekleme sırasına göre çizilir.

Poligon ekle

  1. Bir 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 bağımsız değişken olarak kullanarak yeni bir GMSPolygon nesnesi oluşturun.
  4. strokeWidth, strokeColor ve fillColor gibi diğer özellikleri dilediğiniz gibi ayarlayın.
  5. GMSPolygon.map özelliğini ayarlayarak poligonu bir GMSMapView nesnesine atayın.
  6. Poligon haritada görünür.

Aşağıdaki kod snippet'inde haritaya bir dikdörtgen eklenmektedir.

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;
      

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

Poligon kaldırma

GMSPolygon.map mülkünü nil olarak ayarlayarak ve layer öğesini üst öğesinden ayırarak bir poligonu kaldırın.

Swift

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

Objective-C

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

Daireler

iOS için Haritalar SDK'sı, genel GMSPolygon sınıfına ek olarak GMSCircle sınıfını da içerir. Bu sınıf, dünyanın yüzeyinde daire çizmenize olanak tanır.

Bir daire oluşturmak için aşağıdaki iki özelliği belirtmeniz gerekir:

  • position olarak CLLocationCoordinate2D.
  • radius metre.

Ardından daire, Dünya'nın yüzeyinde belirli bir center noktasından radius metre uzaklıktaki tüm noktaların kümesi olarak tanımlanır. Maps API tarafından kullanılan Mercator projeksiyonu, düz bir yüzeyde bir küreyi nasıl oluşturduğundan, küre ekvatora yakın bir yerdeyken haritada neredeyse mükemmel bir daire olarak görünür ve ekvatora uzaklaştıkça (ekranda) giderek daha az dairesel 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;
      

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

Çemberi özelleştirme

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

fillColor
Dairenin iç rengini belirten bir UIColor nesnesi. Varsayılan olarak saydamdır.
strokeColor
Dairenin dış çizgisinin rengini belirten bir UIColor nesnesi. Varsayılan olarak blackColor değerine ayarlanır.
strokeWidth
Çemberin dış çizgisinin kalınlığı (ekran noktası cinsinden). Varsayılan olarak 1 değerine ayarlanır. Harita yakınlaştırıldığında kalınlık ölçeklendirilmez.

Aşağıdaki snippet, yarı saydam kırmızı iç kısmı olan kalın bir kırmızı 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;
      

İçi boş poligon oluşturma

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

Poligonun kapsadığı en büyük alanı belirten bir yola sahip bir poligon oluşturun. Ardından, çokgenin holes özelliğini bir veya daha fazla GMSPath nesnesi dizisi olarak belirtin. Bu nesneler, çokgen içindeki boşlukları tanımlar.

Daha küçük bir yol daha büyük yol tarafından tamamen çevrelenmişse poligonun bir parçası kaldırılmış gibi görünür.

Aşağıdaki kod örneği, iki deliği olan 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;