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
- Bir
GMSMutablePath
nesnesi oluşturun. - Yoldaki noktaları
addCoordinate:
veyaaddLatitude:longitude:
yöntemleriyle ayarlayın. - Yolu bağımsız değişken olarak kullanarak yeni bir
GMSPolyline
nesnesi oluşturun. - Gerekirse
strokeWidth
vestrokeColor
gibi diğer özellikleri ayarlayın. GMSPolyline
öğesininmap
özelliğini ayarlayın.- 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;
Ç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 farklı segmentler haritada düz çizgi olarak çizilir. Varsayılan olarakNO
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 yoluspans
özelliğini ayarlamaktır. strokeColor
- Poli çizginin rengini belirten bir
UIColor
nesnesi. Varsayılan olarakblueColor
değerine ayarlanır.spans
ayarlanmışsastrokeColor
ö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 yükseklik veya hız gibi değişiklikleri 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.
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.
Bu özelliği, GMSTextureStyle
'u 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ı bakımı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 bu nesneye noktalar ekleyerek yolunu belirtin.
Bu noktalar, poligonun ana hatlarını oluşturur. Her CLLocationCoordinate2D
, Dünya yüzeyindeki bir noktayı temsil eder. Çizgi segmentleri, noktalar arasında yola eklediğiniz sıraya göre çizilir.
Poligon ekle
- Bir
GMSMutablePath
nesnesi oluşturun. - Yoldaki noktaları
addCoordinate:
veyaaddLatitude:longitude:
yöntemleriyle ayarlayın. Bu noktalar, poligonun ana hatlarını oluşturur. - Yolu bağımsız değişken olarak kullanarak yeni bir
GMSPolygon
nesnesi oluşturun. strokeWidth
,strokeColor
vefillColor
gibi diğer özellikleri dilediğiniz gibi ayarlayın.GMSPolygon.map
özelliğini ayarlayarak poligonu birGMSMapView
nesnesine atayın.- 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
olarakCLLocationCoordinate2D
.radius
metre.
Ardından, bir 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 yaklaş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 olarakblackColor
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 dizi, ç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;